Re: BUG #16811: Severe reproducible server backend crash

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: BUG #16811: Severe reproducible server backend crash
Дата
Msg-id 208316.1610040164@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Re: BUG #16811: Severe reproducible server backend crash  (Thomas Munro <thomas.munro@gmail.com>)
Ответы Re: BUG #16811: Severe reproducible server backend crash  (James Inform <james.inform@pharmapp.de>)
Re: BUG #16811: Severe reproducible server backend crash  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-bugs
Thomas Munro <thomas.munro@gmail.com> writes:
> Thanks for the report.  I happened to have DBeaver here and could
> reproduce this, and got the following core:

I can reproduce it without anything extra.  What's needed is to run
the problematic statement in extended query mode, which you can
do like this:

$ cat foo.sql
do $$ begin rollback; end $$;

$ pgbench -n -f foo.sql -M prepared
pgbench: error: client 0 aborted in command 0 (SQL) of script 0; perhaps the backend died while processing

That lnext() should certainly not find pstmt->stmts to be NIL,
seeing that we are inside a loop over that list.  Ergo, something
is clobbering this active portal.  A bit of gdb'ing says the clobber
happens here:

#0  AtAbort_Portals () at portalmem.c:833
    (this appears to be inlined code from PortalReleaseCachedPlan)
#1  0x00000000005a4ce2 in AbortTransaction () at xact.c:2711
#2  0x00000000005a55d5 in AbortCurrentTransaction () at xact.c:3322
#3  0x00000000006d1557 in _SPI_rollback (chain=<optimized out>) at spi.c:326
#4  0x00007feef9e851c5 in exec_stmt_rollback (stmt=0x2babca8,
    estate=0x7fff35e55ee0) at pl_exec.c:4961
#5  exec_stmts (estate=0x7fff35e55ee0, stmts=0x2babd80) at pl_exec.c:2081
#6  0x00007feef9e863cb in exec_stmt_block (estate=0x7fff35e55ee0,
    block=0x2babdd8) at pl_exec.c:1904
#7  0x00007feef9e864bb in exec_toplevel_block (
    estate=estate@entry=0x7fff35e55ee0, block=0x2babdd8) at pl_exec.c:1602
#8  0x00007feef9e86ced in plpgsql_exec_function (func=func@entry=0x2ba7c60,
    fcinfo=fcinfo@entry=0x7fff35e56060,
    simple_eval_estate=simple_eval_estate@entry=0x2bad6b0,
    simple_eval_resowner=simple_eval_resowner@entry=0x2b12e40,
    atomic=<optimized out>) at pl_exec.c:605
#9  0x00007feef9e8fd58 in plpgsql_inline_handler (fcinfo=<optimized out>)
    at pl_handler.c:344
#10 0x000000000091a540 in FunctionCall1Coll (flinfo=0x7fff35e561f0,
    collation=<optimized out>, arg1=<optimized out>) at fmgr.c:1141
#11 0x000000000091aaa9 in OidFunctionCall1Coll (functionId=<optimized out>,
    collation=collation@entry=0, arg1=45120272) at fmgr.c:1419
#12 0x000000000064df7e in ExecuteDoStmt (stmt=stmt@entry=0x2b07ed8,
    atomic=atomic@entry=false) at functioncmds.c:2027
#13 0x000000000080fa14 in standard_ProcessUtility (pstmt=0x2b07e40,
    queryString=0x2b079a0 "do $$ begin rollback; end $$;",
    context=PROCESS_UTILITY_TOPLEVEL, params=0x0, queryEnv=0x0,
    dest=0xa90540 <donothingDR>, qc=0x7fff35e56630) at utility.c:696
#14 0x000000000080d044 in PortalRunUtility (portal=0x2b47240, pstmt=0x2b07e40,
    isTopLevel=<optimized out>, setHoldSnapshot=<optimized out>,
    dest=0xa90540 <donothingDR>, qc=0x7fff35e56630) at pquery.c:1159
#15 0x000000000080db24 in PortalRunMulti (portal=portal@entry=0x2b47240,
    isTopLevel=isTopLevel@entry=true,
    setHoldSnapshot=setHoldSnapshot@entry=false, dest=0xa90540 <donothingDR>,
    dest@entry=0x2adfa88, altdest=0xa90540 <donothingDR>,
    altdest@entry=0x2adfa88, qc=qc@entry=0x7fff35e56630) at pquery.c:1311
#16 0x000000000080e937 in PortalRun (portal=portal@entry=0x2b47240,
    count=count@entry=9223372036854775807, isTopLevel=isTopLevel@entry=true,
    run_once=run_once@entry=true, dest=dest@entry=0x2adfa88,
    altdest=altdest@entry=0x2adfa88, qc=0x7fff35e56630) at pquery.c:779
#17 0x000000000080c77b in exec_execute_message (max_rows=9223372036854775807,
    portal_name=0x2adf670 "") at postgres.c:2196
#18 PostgresMain (argc=argc@entry=1, argv=argv@entry=0x7fff35e569c0,
    dbname=<optimized out>, username=<optimized out>) at postgres.c:4452

So I would say that the conditions under which AtAbort_Portals
decides that it can destroy a portal rather than just mark it failed
need to be reconsidered.  It's not clear to me exactly how that
should change though.  Maybe Peter has more insight.

            regards, tom lane



В списке pgsql-bugs по дате отправления:

Предыдущее
От: PG Bug reporting form
Дата:
Сообщение: BUG #16813: error to solve the problem "Windows could not stat file - over 4GB"
Следующее
От: PG Bug reporting form
Дата:
Сообщение: BUG #16814: Invalid memory access on regexp_match with .* and BRE