/* Initialize resp if RES_INIT is not yet set or if res_init in some other thread requested re-initializing. */ int __res_maybe_init (res_state resp, int preinit) { if (resp->options & RES_INIT) { if (__res_initstamp != resp->_u._ext.initstamp) { if (resp->nscount > 0) { __res_nclose (resp); int ns; for (ns = 0; ns < MAXNS; ns++) { free (resp->_u._ext.nsaddrs[ns]); resp->_u._ext.nsaddrs[ns] = NULL; } return __res_vinit (resp, 1); } } return 0; } else if (preinit) { if (!resp->retrans) resp->retrans = RES_TIMEOUT; if (!resp->retry) resp->retry = 4; resp->options = RES_DEFAULT; if (!resp->id) resp->id = res_randomid (); return __res_vinit (resp, 1); } else return __res_ninit (resp); }
/* Initialize resp if RES_INIT is not yet set or if res_init in some other thread requested re-initializing. */ int __res_maybe_init (res_state resp, int preinit) { static time_t last_mtime; struct stat statbuf; int ret; if (resp->options & RES_INIT) { ret = stat (_PATH_RESCONF, &statbuf); __libc_lock_lock (lock); if ((ret == 0) && (last_mtime != statbuf.st_mtime)) { last_mtime = statbuf.st_mtime; atomicinc (__res_initstamp); } __libc_lock_unlock (lock); if (__res_initstamp != resp->_u._ext.initstamp) { if (resp->nscount > 0) __res_iclose (resp, true); return __res_vinit (resp, 1); } return 0; } else if (preinit) { if (!resp->retrans) resp->retrans = RES_TIMEOUT; if (!resp->retry) resp->retry = 4; resp->options = RES_DEFAULT; if (!resp->id) resp->id = res_randomid (); return __res_vinit (resp, 1); } else return __res_ninit (resp); }
/* Initialize resp if RES_INIT is not yet set or if res_init in some other thread requested re-initializing. */ int __res_maybe_init (res_state resp, int preinit) { if (resp->options & RES_INIT) { if (__res_initstamp != resp->_u._ext.initstamp) { if (resp->nscount > 0) __res_iclose (resp, true); return __res_vinit (resp, 1); } return 0; } else if (preinit) { if (!resp->retrans) resp->retrans = RES_TIMEOUT; if (!resp->retry) resp->retry = 4; resp->options = RES_DEFAULT; if (!resp->id) resp->id = res_randomid (); return __res_vinit (resp, 1); } else return __res_ninit (resp); }