summaryrefslogtreecommitdiffstats
path: root/lib/libc
diff options
context:
space:
mode:
authormarkj <markj@FreeBSD.org>2017-07-18 23:02:34 +0000
committermarkj <markj@FreeBSD.org>2017-07-18 23:02:34 +0000
commit197e383a214949122978ec310c1b422ba4784570 (patch)
tree62b1b8e4fb427bc5216be6409d6f5c6b84207e5e /lib/libc
parent9d961a70ecbaa65d2848594a9fb651e088102554 (diff)
downloadFreeBSD-src-197e383a214949122978ec310c1b422ba4784570.zip
FreeBSD-src-197e383a214949122978ec310c1b422ba4784570.tar.gz
MFC r320895:
Don't dlclose NSS modules from nss_atexit().
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/net/nsdispatch.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/lib/libc/net/nsdispatch.c b/lib/libc/net/nsdispatch.c
index a0defa5..308f58f 100644
--- a/lib/libc/net/nsdispatch.c
+++ b/lib/libc/net/nsdispatch.c
@@ -525,7 +525,7 @@ fin:
vector_sort(_nsmod, _nsmodsize, sizeof(*_nsmod), string_compare);
}
-
+static int exiting = 0;
static void
ns_mod_free(ns_mod *mod)
@@ -536,12 +536,10 @@ ns_mod_free(ns_mod *mod)
return;
if (mod->unregister != NULL)
mod->unregister(mod->mtab, mod->mtabsize);
- if (mod->handle != nss_builtin_handle)
+ if (mod->handle != nss_builtin_handle && !exiting)
(void)dlclose(mod->handle);
}
-
-
/*
* Cleanup
*/
@@ -550,6 +548,7 @@ nss_atexit(void)
{
int isthreaded;
+ exiting = 1;
isthreaded = __isthreaded;
if (isthreaded)
(void)_pthread_rwlock_wrlock(&nss_lock);
@@ -561,8 +560,6 @@ nss_atexit(void)
(void)_pthread_rwlock_unlock(&nss_lock);
}
-
-
/*
* Finally, the actual implementation.
*/
OpenPOWER on IntegriCloud