Re: BUG #2724: Could not check connection status with "ssl=on" - Mailing list pgsql-bugs

From Tom Lane
Subject Re: BUG #2724: Could not check connection status with "ssl=on"
Date
Msg-id 6900.1161968032@sss.pgh.pa.us
Whole thread Raw
In response to BUG #2724: Could not check connection status with "ssl=on"  ("Alexey Zayats" <alexey.zayats@gmail.com>)
Responses Re: BUG #2724: Could not check connection status with "ssl=on"
List pgsql-bugs
"Alexey Zayats" <alexey.zayats@gmail.com> writes:
> I've got next backtrace from core file:
> --------------------------
> Program received signal SIGPIPE, Broken pipe.
> [Switching to Thread 46912549615488 (LWP 28743)]
> 0x00002aaaad07ae32 in __write_nocancel () from /lib64/tls/libpthread.so.0
> (gdb) bt
> #0  0x00002aaaad07ae32 in __write_nocancel () from
> /lib64/tls/libpthread.so.0
> #1  0x00002aaaad9e2187 in BIO_sock_should_retry ()
> from /usr/lib64/libcrypto.so.0.9.7
> #2  0x00002aaaad9e0751 in BIO_write () from /usr/lib64/libcrypto.so.0.9.7
> #3  0x00002aaaad82b8a4 in ssl3_change_cipher_state ()
> from /usr/lib64/libssl.so.0.9.7
> #4  0x00002aaaad82b9a2 in ssl3_dispatch_alert ()
> from /usr/lib64/libssl.so.0.9.7
> #5  0x00002aaaad82a084 in ssl3_shutdown () from /usr/lib64/libssl.so.0.9.7
> #6  0x00002aaaaaec4095 in close_SSL () from /usr/local/lib/libpq.so.4
> #7  0x00002aaaaaebd408 in pqReadData () from /usr/local/lib/libpq.so.4

I would argue that this is an OpenSSL bug: it should not be trying to
write on a connection that it knows perfectly well is already dead.
(It should know that, anyway, because the only way that pqReadData would
be trying to close the connection is that it got an error indication
from OpenSSL.)

Possibly we could work around the problem by disabling SIGPIPE during
connection close, but I don't really see why we should have to do that.

> Before any queries send, i'm using isOpen method that looks like:
> --
> bool QPSQLDriver::isOpen() const
> {
>         return PQstatus(d->connection) == CONNECTION_OK;
> }

That's pretty much a waste of time, because all it tells you is whether
the connection was good the last time a query was done.  It is *not*
intended as an active "ping".

            regards, tom lane

pgsql-bugs by date:

Previous
From: "Thomas H."
Date:
Subject: Re: BUG #2712: could not fsync segment: Permission
Next
From: Jeff Davis
Date:
Subject: COPY fails on 8.1 with invalid byte sequences in text types