Testers wanted: reentrant resolver
Brian F. Feldman
green at FreeBSD.org
Fri Feb 20 16:48:32 PST 2004
Daniel Eischen <eischen at vigrid.com> wrote:
> On Fri, 20 Feb 2004, Brian F. Feldman wrote:
>
> > Daniel Eischen <eischen at vigrid.com> wrote:
> > > Ugh, can you put h_errno inside the per-thread res stuff.
> > > We shouldn't need to have to add special hooks in the
> > > threads libraries for this.
> >
> > Please explain what you're saying further. On correctly-threaded operating
> > systems, h_errno is just like errno -- and I made it act EXACTLY as errno
> > acts, and is per-thread storage for everything but the first thread. It's
> > absolutely necessary if we want to return the correct errors; even if
> > everything else in the world is totally reentrant, if h_errno isn't, the
> > wrong errors can be returned! What "special hooks" do you mean? There's no
> > way to not change probably hundreds of lines of code without actually doing
> > the work to make h_errno thread-safe. It's the only proper thing to do.
>
> The implementation of __h_errno() need not depend on something
> special stuffed in struct pthread. Use thread-local storage
> (pthread_getspecific()) like you did for the res_send_private
> stuff. Especially since these interfaces should be deprecated
> in favor of what looks to be BIND 8.2.2 interfaces (according
> to the Solaris man pages).
Other APIs have the option of failing. __h_errno() does not have the option
of failing, so what do I do if pthread_key_create() fails? Also, if
malloc() fails each time pthread_getspecific() returns NULL for the thread?
--
Brian Fundakowski Feldman \'[ FreeBSD ]''''''''''\
<> green at FreeBSD.org \ The Power to Serve! \
Opinions expressed are my own. \,,,,,,,,,,,,,,,,,,,,,,\
More information about the freebsd-current
mailing list