pg.ddx.io  pgsql-interfaces@postgresql.org mailing list archive  
help / color / mirror / Atom feed
Receiving SIGPIPE for PQfinish(<broken-connection>)
6+ messages / 3 participants
[nested] [flat]

* Receiving SIGPIPE for PQfinish(<broken-connection>)
@ 2006-03-12 11:28 Volkan YAZICI <yazicivo@ttnet.net.tr>
  2006-03-12 16:18 ` Re: Receiving SIGPIPE for PQfinish(<broken-connection>) Tom Lane <tgl@sss.pgh.pa.us>
  0 siblings, 1 reply; 6+ messages in thread

From: Volkan YAZICI @ 2006-03-12 11:28 UTC (permalink / raw)
  To: pgsql-interfaces

Hi,

I've a problem when calling PQfinish() on a broken connection.

  Breakpoint 1, main () at finish.c:9
  9               PGconn  *conn = PQconnectdb("dbname=test");
  (gdb) n
  11              if (PQstatus(conn) != CONNECTION_OK)
  (gdb) n
  18              PQfinish(conn);

Shutting down postmaster in here (or restarting on another port).

  (gdb) n
  
  Program received signal SIGPIPE, Broken pipe.
  0xffffe410 in ?? ()
  (gdb) bt
  #0  0xffffe410 in ?? ()
  #1  0xbfafd368 in ?? ()
  #2  0xb7fe8308 in ?? () from ../usr/lib/libpq.so.4
  #3  0xbfafd340 in ?? ()
  #4  0xb7f68321 in send () from /lib/libc.so.6
  #5  0xb7fe24a3 in pqsecure_write (conn=0xffffffe0, ptr=0xffffffe0, len=4294967264) at fe-secure.c:480
  #6  0xb7fdbc9a in pqSendSome (conn=0x804a008, len=5) at fe-misc.c:757
  #7  0xb7fd5448 in closePGconn (conn=0x804a008) at fe-connect.c:1973
  #8  0xb7fd5475 in PQfinish (conn=0x804a008) at fe-connect.c:2033
  #9  0x080485f1 in main () at finish.c:18

Should I handle SIGPIPE each time I call PQfinish() manually or should
PQfinish() be responsible for this task?


Regards.



^ permalink  raw  reply  [nested|flat] 6+ messages in thread

* Re: Receiving SIGPIPE for PQfinish(<broken-connection>)
  2006-03-12 11:28 Receiving SIGPIPE for PQfinish(<broken-connection>) Volkan YAZICI <yazicivo@ttnet.net.tr>
@ 2006-03-12 16:18 ` Tom Lane <tgl@sss.pgh.pa.us>
  2006-03-13 15:55   ` Re: Receiving SIGPIPE for PQfinish(<broken-connection>) Volkan YAZICI <yazicivo@ttnet.net.tr>
  0 siblings, 1 reply; 6+ messages in thread

From: Tom Lane @ 2006-03-12 16:18 UTC (permalink / raw)
  To: Volkan YAZICI <yazicivo@ttnet.net.tr>; +Cc: pgsql-interfaces

Volkan YAZICI <yazicivo@ttnet.net.tr> writes:
> I've a problem when calling PQfinish() on a broken connection.

pqsecure_write should have disabled SIGPIPE already.  You should look
into why that is seemingly not working.

			regards, tom lane



^ permalink  raw  reply  [nested|flat] 6+ messages in thread

* Re: Receiving SIGPIPE for PQfinish(<broken-connection>)
  2006-03-12 11:28 Receiving SIGPIPE for PQfinish(<broken-connection>) Volkan YAZICI <yazicivo@ttnet.net.tr>
  2006-03-12 16:18 ` Re: Receiving SIGPIPE for PQfinish(<broken-connection>) Tom Lane <tgl@sss.pgh.pa.us>
@ 2006-03-13 15:55   ` Volkan YAZICI <yazicivo@ttnet.net.tr>
  2006-04-23 04:09     ` Re: Receiving SIGPIPE for PQfinish(<broken-connection>) Bruce Momjian <pgman@candle.pha.pa.us>
  0 siblings, 1 reply; 6+ messages in thread

From: Volkan YAZICI @ 2006-03-13 15:55 UTC (permalink / raw)
  To: Tom Lane <tgl@sss.pgh.pa.us>; +Cc: pgsql-interfaces

On Mar 12 11:18, Tom Lane wrote:
> pqsecure_write should have disabled SIGPIPE already.  You should look
> into why that is seemingly not working.

When I omit --enable-thread-safety, code doesn't handle in the case of
a SIG_ERR return on the call to pqsignal() made from pqsecure_write().

Furthermore, I still couldn't figure out why pqsignal() cannot handle
SIGPIPE - despite pqsignal() doesn't return SIG_ERR. (A related small
debug output is attached.)

Everything works fine when thread safety is enabled.


Regards.
Breakpoint 5, PQfinish (conn=0x0) at fe-connect.c:2030
2030    {

# Shutdown postmaster in here.

(gdb) c
Continuing.

Breakpoint 6, pqsecure_write (conn=0x804e208, ptr=0x804e208,
len=134537736) at fe-secure.c:406
406             pqsigfunc       oldsighandler = pqsignal(SIGPIPE,
SIG_IGN);
(gdb) n
393     {
(gdb) 
406             pqsigfunc       oldsighandler = pqsignal(SIGPIPE,
SIG_IGN);
(gdb) 

Breakpoint 4, pqsignal (signo=5, func=0x804e208) at pqsignal.c:35
35              act.sa_handler = func;
(gdb) 
28      {
(gdb) 
35              act.sa_handler = func;
(gdb) 
36              sigemptyset(&act.sa_mask);
(gdb) 
28      {
(gdb) 
36              sigemptyset(&act.sa_mask);
(gdb) 
28      {
(gdb) 
36              sigemptyset(&act.sa_mask);
(gdb) 
38              if (signo != SIGALRM)
(gdb) 
42                      act.sa_flags |= SA_NOCLDSTOP;
(gdb) 
44              if (sigaction(signo, &act, &oact) < 0)
(gdb) 
50              return oact.sa_handler;
(gdb) 
52      }
(gdb) 
pqsecure_write (conn=0x0, ptr=0x0, len=0) at fe-secure.c:480
480                     n = send(conn->sock, ptr, len, 0);
(gdb) 

Program received signal SIGPIPE, Broken pipe.
0xffffe410 in ?? ()
(gdb)

Attachments:

  [text/plain] pqsignal.gdb (1.2K, ../../20060313155531.GA191@alamut/2-pqsignal.gdb)
  download | inline:
Breakpoint 5, PQfinish (conn=0x0) at fe-connect.c:2030
2030    {

# Shutdown postmaster in here.

(gdb) c
Continuing.

Breakpoint 6, pqsecure_write (conn=0x804e208, ptr=0x804e208,
len=134537736) at fe-secure.c:406
406             pqsigfunc       oldsighandler = pqsignal(SIGPIPE,
SIG_IGN);
(gdb) n
393     {
(gdb) 
406             pqsigfunc       oldsighandler = pqsignal(SIGPIPE,
SIG_IGN);
(gdb) 

Breakpoint 4, pqsignal (signo=5, func=0x804e208) at pqsignal.c:35
35              act.sa_handler = func;
(gdb) 
28      {
(gdb) 
35              act.sa_handler = func;
(gdb) 
36              sigemptyset(&act.sa_mask);
(gdb) 
28      {
(gdb) 
36              sigemptyset(&act.sa_mask);
(gdb) 
28      {
(gdb) 
36              sigemptyset(&act.sa_mask);
(gdb) 
38              if (signo != SIGALRM)
(gdb) 
42                      act.sa_flags |= SA_NOCLDSTOP;
(gdb) 
44              if (sigaction(signo, &act, &oact) < 0)
(gdb) 
50              return oact.sa_handler;
(gdb) 
52      }
(gdb) 
pqsecure_write (conn=0x0, ptr=0x0, len=0) at fe-secure.c:480
480                     n = send(conn->sock, ptr, len, 0);
(gdb) 

Program received signal SIGPIPE, Broken pipe.
0xffffe410 in ?? ()
(gdb)

^ permalink  raw  reply  [nested|flat] 6+ messages in thread

* Re: Receiving SIGPIPE for PQfinish(<broken-connection>)
  2006-03-12 11:28 Receiving SIGPIPE for PQfinish(<broken-connection>) Volkan YAZICI <yazicivo@ttnet.net.tr>
  2006-03-12 16:18 ` Re: Receiving SIGPIPE for PQfinish(<broken-connection>) Tom Lane <tgl@sss.pgh.pa.us>
  2006-03-13 15:55   ` Re: Receiving SIGPIPE for PQfinish(<broken-connection>) Volkan YAZICI <yazicivo@ttnet.net.tr>
@ 2006-04-23 04:09     ` Bruce Momjian <pgman@candle.pha.pa.us>
  2006-04-24 10:17       ` Re: Receiving SIGPIPE for PQfinish(<broken-connection>) Volkan YAZICI <yazicivo@ttnet.net.tr>
  0 siblings, 1 reply; 6+ messages in thread

From: Bruce Momjian @ 2006-04-23 04:09 UTC (permalink / raw)
  To: Volkan YAZICI <yazicivo@ttnet.net.tr>; +Cc: Tom Lane <tgl@sss.pgh.pa.us>; pgsql-interfaces


Did you ever get this fixed?

---------------------------------------------------------------------------

Volkan YAZICI wrote:
> On Mar 12 11:18, Tom Lane wrote:
> > pqsecure_write should have disabled SIGPIPE already.  You should look
> > into why that is seemingly not working.
> 
> When I omit --enable-thread-safety, code doesn't handle in the case of
> a SIG_ERR return on the call to pqsignal() made from pqsecure_write().
> 
> Furthermore, I still couldn't figure out why pqsignal() cannot handle
> SIGPIPE - despite pqsignal() doesn't return SIG_ERR. (A related small
> debug output is attached.)
> 
> Everything works fine when thread safety is enabled.
> 
> 
> Regards.

[ Attachment, skipping... ]

> 
> ---------------------------(end of broadcast)---------------------------
> TIP 5: don't forget to increase your free space map settings

-- 
  Bruce Momjian   http://candle.pha.pa.us
  EnterpriseDB    http://www.enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +



^ permalink  raw  reply  [nested|flat] 6+ messages in thread

* Re: Receiving SIGPIPE for PQfinish(<broken-connection>)
  2006-03-12 11:28 Receiving SIGPIPE for PQfinish(<broken-connection>) Volkan YAZICI <yazicivo@ttnet.net.tr>
  2006-03-12 16:18 ` Re: Receiving SIGPIPE for PQfinish(<broken-connection>) Tom Lane <tgl@sss.pgh.pa.us>
  2006-03-13 15:55   ` Re: Receiving SIGPIPE for PQfinish(<broken-connection>) Volkan YAZICI <yazicivo@ttnet.net.tr>
  2006-04-23 04:09     ` Re: Receiving SIGPIPE for PQfinish(<broken-connection>) Bruce Momjian <pgman@candle.pha.pa.us>
@ 2006-04-24 10:17       ` Volkan YAZICI <yazicivo@ttnet.net.tr>
  2006-04-24 17:14         ` Re: Receiving SIGPIPE for PQfinish(<broken-connection>) Bruce Momjian <pgman@candle.pha.pa.us>
  0 siblings, 1 reply; 6+ messages in thread

From: Volkan YAZICI @ 2006-04-24 10:17 UTC (permalink / raw)
  To: Bruce Momjian <pgman@candle.pha.pa.us>; +Cc: Tom Lane <tgl@sss.pgh.pa.us>; pgsql-interfaces

On Apr 23 12:09, Bruce Momjian wrote:
> Did you ever get this fixed?

Actually, I couldn't reproduce same error on my current system -
although, as I understand, none of the related source files were
modified. (That failure was reported using Debian Sarge 3.1, so
it could be caused by buggy debian libraries - like their buggy
getpw..._r() family.)

> Volkan YAZICI wrote:
> > On Mar 12 11:18, Tom Lane wrote:
> > > pqsecure_write should have disabled SIGPIPE already.  You should look
> > > into why that is seemingly not working.
> > 
> > When I omit --enable-thread-safety, code doesn't handle in the case of
> > a SIG_ERR return on the call to pqsignal() made from pqsecure_write().
> > 
> > Furthermore, I still couldn't figure out why pqsignal() cannot handle
> > SIGPIPE - despite pqsignal() doesn't return SIG_ERR. (A related small
> > debug output is attached.)

I don't have much experience with signal handling but if any hacker will
ever get chance to take a look at SIG_ERR returning pqsignal() calls'
handling, above problem (?) will be clarified.

> > Everything works fine when thread safety is enabled.

What are the reasons for thread-safety is not enabled by default? Is
this because related system may not support thread locking to be used in
libpq?


Regards.



^ permalink  raw  reply  [nested|flat] 6+ messages in thread

* Re: Receiving SIGPIPE for PQfinish(<broken-connection>)
  2006-03-12 11:28 Receiving SIGPIPE for PQfinish(<broken-connection>) Volkan YAZICI <yazicivo@ttnet.net.tr>
  2006-03-12 16:18 ` Re: Receiving SIGPIPE for PQfinish(<broken-connection>) Tom Lane <tgl@sss.pgh.pa.us>
  2006-03-13 15:55   ` Re: Receiving SIGPIPE for PQfinish(<broken-connection>) Volkan YAZICI <yazicivo@ttnet.net.tr>
  2006-04-23 04:09     ` Re: Receiving SIGPIPE for PQfinish(<broken-connection>) Bruce Momjian <pgman@candle.pha.pa.us>
  2006-04-24 10:17       ` Re: Receiving SIGPIPE for PQfinish(<broken-connection>) Volkan YAZICI <yazicivo@ttnet.net.tr>
@ 2006-04-24 17:14         ` Bruce Momjian <pgman@candle.pha.pa.us>
  0 siblings, 0 replies; 6+ messages in thread

From: Bruce Momjian @ 2006-04-24 17:14 UTC (permalink / raw)
  To: Volkan YAZICI <yazicivo@ttnet.net.tr>; +Cc: Tom Lane <tgl@sss.pgh.pa.us>; pgsql-interfaces

Volkan YAZICI wrote:
> On Apr 23 12:09, Bruce Momjian wrote:
> > Did you ever get this fixed?
> 
> Actually, I couldn't reproduce same error on my current system -
> although, as I understand, none of the related source files were
> modified. (That failure was reported using Debian Sarge 3.1, so
> it could be caused by buggy debian libraries - like their buggy
> getpw..._r() family.)
> 
> > Volkan YAZICI wrote:
> > > On Mar 12 11:18, Tom Lane wrote:
> > > > pqsecure_write should have disabled SIGPIPE already.  You should look
> > > > into why that is seemingly not working.
> > > 
> > > When I omit --enable-thread-safety, code doesn't handle in the case of
> > > a SIG_ERR return on the call to pqsignal() made from pqsecure_write().
> > > 
> > > Furthermore, I still couldn't figure out why pqsignal() cannot handle
> > > SIGPIPE - despite pqsignal() doesn't return SIG_ERR. (A related small
> > > debug output is attached.)
> 
> I don't have much experience with signal handling but if any hacker will
> ever get chance to take a look at SIG_ERR returning pqsignal() calls'
> handling, above problem (?) will be clarified.
> 
> > > Everything works fine when thread safety is enabled.
> 
> What are the reasons for thread-safety is not enabled by default? Is
> this because related system may not support thread locking to be used in
> libpq?

Good question.  One issue is that not all operating systems will pass
the regession configure tests, so we could only support threading on
some platforms by default.  If we get enough OS support, we can then
support it by default, and have a flag to disable it, like we do with
readline handling.

-- 
  Bruce Momjian   http://candle.pha.pa.us
  EnterpriseDB    http://www.enterprisedb.com

  + If your life is a hard drive, Christ can be your backup. +



^ permalink  raw  reply  [nested|flat] 6+ messages in thread


end of thread, other threads:[~2006-04-24 17:14 UTC | newest]

Thread overview: 6+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2006-03-12 11:28 Receiving SIGPIPE for PQfinish(<broken-connection>) Volkan YAZICI <yazicivo@ttnet.net.tr>
2006-03-12 16:18 ` Tom Lane <tgl@sss.pgh.pa.us>
2006-03-13 15:55   ` Volkan YAZICI <yazicivo@ttnet.net.tr>
2006-04-23 04:09     ` Bruce Momjian <pgman@candle.pha.pa.us>
2006-04-24 10:17       ` Volkan YAZICI <yazicivo@ttnet.net.tr>
2006-04-24 17:14         ` Bruce Momjian <pgman@candle.pha.pa.us>

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox