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
Received on 2009-11-13