BUG #12833: Cannot cancel query or terminate backend if it client is SIGSTOPed - Mailing list pgsql-bugs

From eshkinkot@gmail.com
Subject BUG #12833: Cannot cancel query or terminate backend if it client is SIGSTOPed
Date
Msg-id 20150305163708.2544.54177@wrigleys.postgresql.org
Whole thread Raw
Responses Re: BUG #12833: Cannot cancel query or terminate backend if it client is SIGSTOPed  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-bugs
The following bug has been logged on the website:

Bug reference:      12833
Logged by:          Sergey Burladyan
Email address:      eshkinkot@gmail.com
PostgreSQL version: 9.4.1
Operating system:   Slackware 14.1
Description:

I run this command in bash:
$ ../bin/psql -X -At -c 'copy (select * from generate_series(1, 100000000))
to stdout' & ( sleep 2; kill -STOP $!; )

$ ps f --ppid $$
  PID TTY      STAT   TIME COMMAND
24773 pts/23   R+     0:00 ps f --ppid 5021
24685 pts/23   T      0:00 ../bin/psql -X -At -c copy (select * from
generate_series(1, 100000000)) to stdout

Now psql is stopped and I try to cancel it backend with
pg_cancel_backend and pg_terminate_backend, but it not canceled or stopped.
Select from pg_stat_activity still show it as active:

-[ RECORD 1
]----+-------------------------------------------------------------
datid            | 16384
datname          | sergey
pid              | 24688
usesysid         | 10
usename          | sergey
application_name | psql
client_addr      | <NULL>
client_hostname  | <NULL>
client_port      | -1
backend_start    | 2015-03-05 19:17:03.028235+03
xact_start       | 2015-03-05 19:17:03.030116+03
query_start      | 2015-03-05 19:17:03.030116+03
state_change     | 2015-03-05 19:17:03.030118+03
waiting          | f
state            | active
backend_xid      | <NULL>
backend_xmin     | 1268
query            | copy (select * from generate_series(1, 100000000)) to
stdout

$ strace -p 24688
Process 24688 attached
sendto(8, "\nd\0\0\0\n19628\nd\0\0\0\n19629\nd\0\0\0\n1963"..., 8192, 0,
NULL, 0) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGINT {si_signo=SIGINT, si_code=SI_USER, si_pid=24610, si_uid=1000}
---
rt_sigreturn()                          = 44
sendto(8, "\nd\0\0\0\n19628\nd\0\0\0\n19629\nd\0\0\0\n1963"..., 8192, 0,
NULL, 0) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGTERM {si_signo=SIGTERM, si_code=SI_USER, si_pid=24610, si_uid=1000}
---
rt_sigreturn()                          = 44
sendto(8, "\nd\0\0\0\n19628\nd\0\0\0\n19629\nd\0\0\0\n1963"..., 8192, 0,
NULL, 0

(gdb) bt
#0  0x00007f0cd2bde88d in send () from /lib64/libc.so.6
#1  0x00000000005da809 in secure_write (port=<optimized out>, ptr=<optimized
out>, len=<optimized out>) at be-secure.c:458
#2  0x00000000005e205b in internal_flush () at pqcomm.c:1324
#3  0x00000000005e21ad in internal_putbytes (s=0x1e982fa "372\n",
s@entry=0x1e982f8 "20372\n", len=4) at pqcomm.c:1270
#4  0x00000000005e3342 in pq_putmessage (msgtype=msgtype@entry=100 'd',
s=0x1e982f8 "20372\n", len=<optimized out>) at pqcomm.c:1467
#5  0x000000000055ccbb in CopySendEndOfRow (cstate=cstate@entry=0x1e97ee8)
at copy.c:546
#6  0x000000000055d58a in CopyOneRowTo (cstate=cstate@entry=0x1e97ee8,
tupleOid=tupleOid@entry=0, values=0x1ea6d20, nulls=0x1ea6d40 "") at
copy.c:1939
#7  0x000000000055e195 in copy_dest_receive (slot=0x1ea5ff8, self=0x1ea1f10)
at copy.c:4310
#8  0x00000000005af282 in ExecutePlan (dest=0x1ea1f10, direction=<optimized
out>, numberTuples=0, sendTuples=1 '\001', operation=CMD_SELECT,
planstate=0x1ea5cf0, estate=0x1ea5bd8)
    at execMain.c:1511
#9  standard_ExecutorRun (queryDesc=0x1ea1f68, direction=<optimized out>,
count=0) at execMain.c:319
#10 0x000000000055decf in CopyTo (cstate=0x1e97ee8) at copy.c:1836
#11 DoCopyTo (cstate=cstate@entry=0x1e97ee8) at copy.c:1659
#12 0x0000000000561a97 in DoCopy (stmt=stmt@entry=0x1e62f30,
queryString=0x1e61e48 "copy (select * from generate_series(1, 100000000)) to
stdout", processed=processed@entry=0x7fffb48692f8)
    at copy.c:878
#13 0x00000000006b0509 in standard_ProcessUtility (parsetree=0x1e62f30,
queryString=<optimized out>, context=<optimized out>, params=0x0,
dest=<optimized out>,
    completionTag=<optimized out>) at utility.c:525
#14 0x00000000006ad3c1 in PortalRunUtility (portal=portal@entry=0x1e9dba8,
utilityStmt=utilityStmt@entry=0x1e62f30, isTopLevel=isTopLevel@entry=1
'\001', dest=dest@entry=0x1e632d8,
    completionTag=completionTag@entry=0x7fffb4869650 "") at pquery.c:1187
#15 0x00000000006ae06a in PortalRunMulti (portal=portal@entry=0x1e9dba8,
isTopLevel=isTopLevel@entry=1 '\001', dest=dest@entry=0x1e632d8,
altdest=altdest@entry=0x1e632d8,
    completionTag=completionTag@entry=0x7fffb4869650 "") at pquery.c:1318
#16 0x00000000006aebff in PortalRun (portal=portal@entry=0x1e9dba8,
count=count@entry=9223372036854775807, isTopLevel=isTopLevel@entry=1 '\001',
dest=dest@entry=0x1e632d8,
    altdest=altdest@entry=0x1e632d8,
completionTag=completionTag@entry=0x7fffb4869650 "") at pquery.c:816
#17 0x00000000006ac6ed in exec_simple_query (query_string=0x1e61e48 "copy
(select * from generate_series(1, 100000000)) to stdout") at
postgres.c:1072
#18 PostgresMain (argc=<optimized out>, argv=argv@entry=0x1dd3730,
dbname=0x1dd3590 "sergey", username=<optimized out>) at postgres.c:4074
#19 0x000000000045eb58 in BackendRun (port=0x1e1bac0) at postmaster.c:4155
#20 BackendStartup (port=0x1e1bac0) at postmaster.c:3829
#21 ServerLoop () at postmaster.c:1597
#22 0x0000000000652279 in PostmasterMain (argc=argc@entry=3,
argv=argv@entry=0x1dd2750) at postmaster.c:1244
#23 0x000000000045f9af in main (argc=3, argv=0x1dd2750) at main.c:228

git 2570e28 REL9_4_STABLE | PostgreSQL 9.4.1 on x86_64-unknown-linux-gnu,
compiled by gcc (GCC) 4.8.2, 64-bit

pgsql-bugs by date:

Previous
From: Tom Lane
Date:
Subject: Re: BUG #12832: pg_dump ERROR with temporary functions
Next
From: Tom Lane
Date:
Subject: Re: BUG #12833: Cannot cancel query or terminate backend if it client is SIGSTOPed