Yang Tse wrote:
> 2009/11/12, Constantine Sapuntzakis wrote:
> 
> > > The same way as other functions check for specific function
> > > capabilities, the getaddrinfo function check now will also attempt to
> > > find out if it happens to be threadsafe.
> >
> > Looking at your recent checkin... getaddrinfo is also probably thread
> > safe if gethostbyname_r exists.
> > I think it would be most straightforward HAVE_GETADDRINFO_THREADSAFE
> > be defined to 1 then too.
> 
> Nope, better not go that route. Each system libraries have their own
> quirks, and the configure script should not make any assumtions that
> jump across functions existance and capabilities. This configure
> script runs on all sorts of systems new and ancient.
> 
> Take for example systems that expose all four getaddrinfo,
> gethostbyname, getaddrinfo_r and gethostbyname_r, when this happens
> the non *_r functions might not be threadsafe while the *_r ones are
> granted to be so.

There is no need for getaddrinfo_r, because getaddrinfo is *already*
defined as a thread-safe, reentrant interface.

>From a thread-safety point of view, getaddrinfo is like
gethostbyname_r, not like gethostbyname.

The only problem with getaddrinfo is that some people implemented it
as a wrapper around gethostbyname, or around other DNS functions,
without using a lock to make that thread safe.  (And some people did
use a lock, which makes it thread safe but not concurrent.  Oh well!)

They did that because getaddrinfo is another standard interface, worth
providing.

As far as I know, nobody has ever implemented gethostbyname_r as a
stupid thread-unsafe wrapper around gethostbyname.  After all, what
would be the point in that?

That's why the presence of gethostbyname_r could be a clue that the
resolver implementation is thread safe, or can be used that way, and
so getaddrinfo is likely to be thread safe to.  Even if getaddrinfo is
a wrapper, it is likely to be wrapping around gethostbyname_r in that
case.

I don't know if presence of gethostbyname_r really means getaddrinfo
is thread-safe, but it's a good idea.

In my own code I'm currently assuming getaddrinfo is thread-safe on
unknown platforms (because it is part of it's specification), which
means I have a special check only BSDs, where version checks are
needed.  I'm tempted to find out of the BSDs switched to thread-safe
getaddrinfo at the same time as providing gethostbyname_r, in which
case I'd change the test to look for that.

-- Jamie
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette:  http://curl.haxx.se/mail/etiquette.html

Reply via email to