Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 05 Jun 2004 14:24:58 -0700
From:      Sean McNeil <sean@mcneil.com>
To:        Michael Nottebrock <michaelnottebrock@gmx.net>
Cc:        freebsd-ports@freebsd.org
Subject:   Re: post-patch blues with db3, db4, db41
Message-ID:  <1086470698.68421.8.camel@server.mcneil.com>
In-Reply-To: <200406052313.28195.michaelnottebrock@gmx.net>
References:  <1086462964.42167.5.camel@server.mcneil.com> <200406052313.28195.michaelnottebrock@gmx.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, 2004-06-05 at 14:13, Michael Nottebrock wrote:
> On Saturday 05 June 2004 21:16, Sean McNeil wrote:
> > Hi,
> >
> > There are post-patch targets for these ports that are causing issues
> > with the libraries built.  The target:
> >
> > post-patch:
> >         @${REINPLACE_CMD} -Ee \
> >                 's|-l?pthread|${PTHREAD_LIBS}|g'
> > ${WRKSRC}/${CONFIGURE_SCRIPT}
> >
> > causes the library to be linked with libpthread.so.  This is a
> > dependency that we do not want.  It will in turn cause issues with
> > nss_ldap and db doesn't use any threading.  It is thread safe, but that
> > doesn't mean it should be linked with pthread.
> 
> db links to a threads lib by default all by itself, the REINPLACE simply makes 
> sure it's linked to the right lib.

Not true.  The REINPLACE changes it so that the shared library is
created with -lpthread instead of -pthread.  This causes the library to
include libpthread.so.1 as seen by ldd.  The applications correctly link
with the pthread library (at least for db41).  There is no need to have
/usr/local/lib/libdb41.so.1 require libpthread.so.1.  This is wrong.

> >
> > I took out that target from my build of db41 and all is well for me.
> > With it in, nss_ldap ends up causing all sorts of bad things to happen
> > because it uses db41 (via openldap and sasl) and it in turn pulls in
> > pthread when it shouldn't.
> 
> It would seem nss_ldap needs to be fixed to be threads safe.

nss_ldap is thread safe.  Yet any nss* module should not itself cause
the thread library to be pulled into an application.  In fact, here is a
general rule:

No shared library that does not explicitly call pthread functionality
(i.e. pthread* functions) should be linked to require libthread.

This is a simple rule that db3, db4, and db41 do not follow.  Removing
the REINPLACE makes it follow the rule.

I have tested this and found that this to be true.

Sean




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1086470698.68421.8.camel>