Fix getaddrinfo for [!_STATBUF_ST_NSEC] case.

This commit is contained in:
Roland McGrath 2012-08-17 11:47:06 -07:00
parent 750c1f2a9a
commit a084405777
2 changed files with 42 additions and 2 deletions

View File

@ -1,5 +1,12 @@
2012-08-17 Roland McGrath <roland@hack.frob.com>
* sysdeps/posix/getaddrinfo.c
(save_gaiconf_mtime, check_gaiconf_mtime): New functions.
(gaiconf_init, gaiconf_reload): Use them.
[!_STATBUF_ST_NSEC]
(gaiconf_mtime, save_gaiconf_mtime, check_gaiconf_mtime):
Define using time_t rather than struct timespec.
* sysdeps/generic/malloc-machine.h (MUTEX_INITIALIZER): New macro.
(atomic_full_barrier, atomic_read_barrier, atomic_write_barrier):
Macros removed.

View File

@ -1855,8 +1855,41 @@ static int gaiconf_reload_flag;
static int gaiconf_reload_flag_ever_set;
/* Last modification time. */
#ifdef _STATBUF_ST_NSEC
static struct timespec gaiconf_mtime;
static inline void
save_gaiconf_mtime (const struct stat64 *st)
{
gaiconf_mtime = st->st_mtim;
}
static inline bool
check_gaiconf_mtime (const struct stat64 *st)
{
return (st->st_mtim.tv_sec == gaiconf_mtime.tv_sec
&& st->st_mtim.tv_nsec == gaiconf_mtime.tv_nsec);
}
#else
static time_t gaiconf_mtime;
static inline void
save_gaiconf_mtime (const struct stat64 *st)
{
gaiconf_mtime = st->st_mtime;
}
static inline bool
check_gaiconf_mtime (const struct stat64 *st)
{
return st->mtime == gaiconf_mtime;
}
#endif
libc_freeres_fn(fini)
{
@ -2298,7 +2331,7 @@ gaiconf_init (void)
if (oldscope != default_scopes)
free ((void *) oldscope);
gaiconf_mtime = st.st_mtim;
save_gaiconf_mtime (&st);
}
else
{
@ -2320,7 +2353,7 @@ gaiconf_reload (void)
{
struct stat64 st;
if (__xstat64 (_STAT_VER, GAICONF_FNAME, &st) != 0
|| memcmp (&st.st_mtim, &gaiconf_mtime, sizeof (gaiconf_mtime)) != 0)
|| !check_gaiconf_mtime (&st))
gaiconf_init ();
}