mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-23 15:32:33 +00:00
uClibc: make res_init() thread safe
Signed-off-by: Jiri Slachta <slachta@cesnet.cz> SVN-Revision: 39178
This commit is contained in:
parent
8cabffaa3b
commit
c4b013f00b
@ -0,0 +1,55 @@
|
||||
--- a/libc/inet/resolv.c
|
||||
+++ b/libc/inet/resolv.c
|
||||
@@ -3432,6 +3432,7 @@ static void res_sync_func(void)
|
||||
*/
|
||||
}
|
||||
|
||||
+/* has to be called under __resolv_lock */
|
||||
static int
|
||||
__res_vinit(res_state rp, int preinit)
|
||||
{
|
||||
@@ -3440,7 +3441,6 @@ __res_vinit(res_state rp, int preinit)
|
||||
int m = 0;
|
||||
#endif
|
||||
|
||||
- __UCLIBC_MUTEX_LOCK(__resolv_lock);
|
||||
__close_nameservers();
|
||||
__open_nameservers();
|
||||
|
||||
@@ -3532,7 +3532,6 @@ __res_vinit(res_state rp, int preinit)
|
||||
|
||||
rp->options |= RES_INIT;
|
||||
|
||||
- __UCLIBC_MUTEX_UNLOCK(__resolv_lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -3582,11 +3582,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)
|
||||
@@ -3687,7 +3687,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 */
|
||||
--
|
||||
cgit v0.9.1
|
Loading…
Reference in New Issue
Block a user