Re: libpq's multi-threaded SSL callback handling is busted - Mailing list pgsql-hackers

From Jan Urbański
Subject Re: libpq's multi-threaded SSL callback handling is busted
Date
Msg-id 87384igbze.fsf@wulczer.org
Whole thread Raw
In response to Re: libpq's multi-threaded SSL callback handling is busted  (Peter Eisentraut <peter_e@gmx.net>)
Responses Re: libpq's multi-threaded SSL callback handling is busted
List pgsql-hackers
Peter Eisentraut writes:

> On 2/12/15 7:28 AM, Jan Urbański wrote:
>> For the sake of discussion, here's a patch to prevent stomping on
>> previously-set callbacks, racy as it looks.
>>
>> FWIW, it does fix the Python deadlock and doesn't cause the PHP segfault...
>
> I don't think this patch would actually fix the problem that was
> described after the original bug report
> (http://www.postgresql.org/message-id/5436991B.5020708@vmware.com),
> namely that another thread acquires a lock while the libpq callbacks are
> set and then cannot release the lock if libpq has been shut down in the
> meantime.

I did test both the Python and the PHP repro scripts and the patch fixed both
the deadlock and the segfault.

What happens is that Python (for instance) stops over the callback
unconditionally. So when libpq gets unloaded, it sees that the currently set
callback is no the one it originally set and refrains from NULLing it.

There's a small race window there, to be sure, but it's a lot better than what
we have now.

Cheers,
Jan



pgsql-hackers by date:

Previous
From: Aliouii Ali
Date:
Subject: Re: Tables cannot have INSTEAD OF triggers
Next
From: Michael Paquier
Date:
Subject: Re: Logical decoding (contrib/test_decoding) walsender broken in 9.5 master?