Thread: Re: RTLD_LAZY considered harmful (Re: pltlc and pltlcu

Re: RTLD_LAZY considered harmful (Re: pltlc and pltlcu

From
"Zeugswetter Andreas SB SD"
Date:
> I hate to sound like a broken record, but I want to re-open that
> discussion about RTLD_LAZY binding that trailed off a week or two
> ago.  I have just noticed that the 7.0 and 7.1 versions of
> src/backend/port/dynloader/linux.h have
> 
> #define pg_dlopen(f)    dlopen(f, 2)
> 
> which in 7.2 has been changed to
> 
> #define pg_dlopen(f)    dlopen((f), RTLD_LAZY | RTLD_GLOBAL)

One thing to really watch out for is that old style extensions,
that only need a few functions from a standard library will load
more efficiently with RTLD_LAZY. (might not even pull in dependent 
libs, that are not needed)

Next thing to watch out for is, that RTLD_NOW will probably not load 
a shared lib, that was not linked with a "no entry" flag. Arguably a bug
for a shared lib, but a recent report has shown that pg fails to supply
such a flag on all ports.

I am for keeping RTLD_LAZY :-)

Andreas


Re: RTLD_LAZY considered harmful (Re: pltlc and pltlcu

From
Tom Lane
Date:
"Zeugswetter Andreas SB SD" <ZeugswetterA@spardat.at> writes:
> One thing to really watch out for is that old style extensions,
> that only need a few functions from a standard library will load
> more efficiently with RTLD_LAZY.

I thought we had disposed of that argument.  The issue here is not a
marginal efficiency gain, it is that an unresolved symbol will lead
to a backend crash (== database-wide restart) unless it is detected
at dlopen time.  As a wise man once said, "I can make it arbitrarily
fast ... if it doesn't have to work."

> Next thing to watch out for is, that RTLD_NOW will probably not load 
> a shared lib, that was not linked with a "no entry" flag.

Say again?
        regards, tom lane