From: Tomas Vondra <tv@fuzzy.cz>
To: pgsql-hackers@postgresql.org
Subject: Re: why local_preload_libraries does require a separate directory ?
Date: Tue, 06 Dec 2011 00:25:36 +0100
Message-ID: <4EDD52F0.8000508@fuzzy.cz> (raw)
In-Reply-To: <19520.1323039961@sss.pgh.pa.us>
References: <4EDA38AE.5030003@fuzzy.cz>
<17337.1322934799@sss.pgh.pa.us>
<4EDA6C0E.6090909@fuzzy.cz>
<17796.1323033362@sss.pgh.pa.us>
<4EDBEC84.2030809@fuzzy.cz>
<19520.1323039961@sss.pgh.pa.us>
On 5.12.2011 00:06, Tom Lane wrote:
> Tomas Vondra <tv@fuzzy.cz> writes:
>> On 4.12.2011 22:16, Tom Lane wrote:
>>> Um ... why would you design it like that?
>
>> The backends are added to pg_stat_activity after the auth hook finishes,
>> which means possible race conditions (backends executed at about the
>> same time don't see each other in pg_stat_activity). So I use an
>> exclusive lock that's acquired before reading pg_stat_activity and
>> released after the pg_stat_activity is updated.
>> That's the only thing the library loaded using local_preload_libraries
>> does - it releases the lock.
>
> That's an unbelievably ugly, and dangerous, kluge. All you need is one
> backend not loading the second library (and remember,
> local_preload_libraries is user-settable) and you've just locked up the
> system.
>
> Why are you using pg_stat_activity for this anyway? Searching the
> ProcArray seems much safer ... see CountDBBackends for an example.
Thanks, reading ProcArray works fine, although the ProcArrayStruct is
private to procarray.c so I had to create a local copy. That sounds a
bit too fragile I guess - whenever it changes, the extension will break
without a warning.
Tomas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-hackers@postgresql.org
Cc: tv@fuzzy.cz
Subject: Re: why local_preload_libraries does require a separate directory ?
In-Reply-To: <4EDD52F0.8000508@fuzzy.cz>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
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