diff options
author | markj <markj@FreeBSD.org> | 2017-07-18 23:02:34 +0000 |
---|---|---|
committer | markj <markj@FreeBSD.org> | 2017-07-18 23:02:34 +0000 |
commit | 197e383a214949122978ec310c1b422ba4784570 (patch) | |
tree | 62b1b8e4fb427bc5216be6409d6f5c6b84207e5e /lib/libc | |
parent | 9d961a70ecbaa65d2848594a9fb651e088102554 (diff) | |
download | FreeBSD-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.c | 9 |
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. */ |