|
@@ -3426,6 +3426,7 @@ static void res_sync_func(void)
|
|
|
*/
|
|
|
}
|
|
|
|
|
|
+/* has to be called under __resolv_lock */
|
|
|
static int
|
|
|
__res_vinit(res_state rp, int preinit)
|
|
|
{
|
|
@@ -3434,7 +3435,6 @@ __res_vinit(res_state rp, int preinit)
|
|
|
int m = 0;
|
|
|
#endif
|
|
|
|
|
|
- __UCLIBC_MUTEX_LOCK(__resolv_lock);
|
|
|
__close_nameservers();
|
|
|
__open_nameservers();
|
|
|
|
|
@@ -3526,7 +3526,6 @@ __res_vinit(res_state rp, int preinit)
|
|
|
|
|
|
rp->options |= RES_INIT;
|
|
|
|
|
|
- __UCLIBC_MUTEX_UNLOCK(__resolv_lock);
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -3576,11 +3575,11 @@ res_init(void)
|
|
|
if (!_res.id)
|
|
|
_res.id = res_randomid();
|
|
|
|
|
|
- __UCLIBC_MUTEX_UNLOCK(__resolv_lock);
|
|
|
-
|
|
|
__res_vinit(&_res, 1);
|
|
|
__res_sync = res_sync_func;
|
|
|
|
|
|
+ __UCLIBC_MUTEX_UNLOCK(__resolv_lock);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
libc_hidden_def(res_init)
|
|
@@ -3679,7 +3678,11 @@ struct __res_state *__resp = &_res;
|
|
|
int
|
|
|
res_ninit(res_state statp)
|
|
|
{
|
|
|
- return __res_vinit(statp, 0);
|
|
|
+ int ret;
|
|
|
+ __UCLIBC_MUTEX_LOCK(__resolv_lock);
|
|
|
+ ret = __res_vinit(statp, 0);
|
|
|
+ __UCLIBC_MUTEX_UNLOCK(__resolv_lock);
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
#endif /* L_res_init */
|