NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: lib/46661: libpthread shouldn't provide __res_state()



The following reply was made to PR lib/46661; it has been noted by GNATS.

From: River Tarnell <river%RT.UK.EU.ORG@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: lib-bug-people%netbsd.org@localhost, gnats-admin%netbsd.org@localhost,
        netbsd-bugs%netbsd.org@localhost
Subject: Re: lib/46661: libpthread shouldn't provide __res_state()
Date: Thu, 5 Jul 2012 16:37:07 +0100

 Christos Zoulas:
 >  | I've looked through the code and I don't see any reason why _res can't=
  be
 >  | used from a program that links with -lpthread.  While it's not a threa=
 d-safe
 >  | interface, using it from a single thread would appear to work fine.
  =20
 >  There is plenty good reason for not doing that; using the non-threaded
 >  versions of the resolver variable will not just "work fine". Just read
 >  the code (in res_send.c).
  =20
 I've looked through the code but I don't see an obvious problem (which=20
 is not to say there isn't one, I just can't see it).  As I understand=20
 it, _res is not really used except in res_init() where it's copied to=20
 _nres, the new global structure for the non-thread-safe resolver=20
 functions (which still appear to work when -lpthread is linked, as long=20
 as the user doesn't touch _res -- at least, they don't abort).
 
 =46rom an API point of view I don't see why _res shouldn't work in=20
 programs linked against -lpthread; of course in multi-threaded programs=20
 there is a re-entrancy problem, but the programs in question do not=20
 create any threads other than the main thread (i.e., they pull in=20
 -lpthread because they are linked against other shared libraries that=20
 do, but they are single-threaded).  Is there an issue with NetBSD's=20
 implementation that prevents this from working?
 
 >  Instead start using the thread-safe versions of the functions (it is
 >  as simple as changing res_send() to res_nsend() for example and managing
 >  your own _res_state with res_ninit()/res_nclose()). They've been there f=
 or
 >  almost a decade now, and there is no excuse for dicking with _res direct=
 ly
 >  anymore!
 
 I don't disagree, but these functions are used in current, existing code=20
 and break popular software (such as Postfix) in certain configurations=20
 on NetBSD.  For that reason alone it would be nice if they worked as=20
 they do on other platforms.
 
        - river.
 


Home | Main Index | Thread Index | Old Index