From: nbd Date: Sat, 28 Dec 2013 15:06:04 +0000 (+0000) Subject: uClibc: make res_init() thread safe X-Git-Url: https://git.archive.openwrt.org/?p=openwrt.git;a=commitdiff_plain;h=249f749937043358063cb99ee8a72978acfcd817 uClibc: make res_init() thread safe Signed-off-by: Jiri Slachta git-svn-id: svn://svn.openwrt.org/openwrt/trunk@39178 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- diff --git a/toolchain/uClibc/patches-0.9.33.2/136-inet_make_res_init_thread_safe.patch b/toolchain/uClibc/patches-0.9.33.2/136-inet_make_res_init_thread_safe.patch new file mode 100644 index 0000000000..e23b0839ad --- /dev/null +++ b/toolchain/uClibc/patches-0.9.33.2/136-inet_make_res_init_thread_safe.patch @@ -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