Date: Wed, 22 Mar 2006 23:32:09 +0900 From: Kazuaki Oda <kaakun@highway.ne.jp> To: hackers@freebsd.org Subject: dlopen() and dlclose() are not MT-safe? Message-ID: <44215FE9.2070602@highway.ne.jp>
next in thread | raw e-mail | index | archive | help
Hello, I compiled the following code on 6.1-PRERELEASE and ran: dltest.c ---------------------------------------------------------------------- #include <err.h> #include <dlfcn.h> #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #define NTHREADS 10 void *func(void *dummy); int main(void) { pthread_t tids[NTHREADS]; int error; int i; for (i = 0; i < NTHREADS; i++) { error = pthread_create(&tids[i], NULL, func, NULL); if (error) errc(1, error, "pthread_create"); } for (;;) sleep(1); /* NOTREACHED */ exit(0); } void *func(void *dummy) { void *h; for (;;) { if ((h = dlopen("/usr/lib/libm.so", RTLD_NOW)) == NULL) errx(1, "dlopen: %s", dlerror()); if (dlclose(h) == -1) errx(1, "dlclose: %s", dlerror()); } /* NOTREACHED */ return (NULL); } ---------------------------------------------------------------------- % cc -Wall -o dltest dltest.c -lpthread % ./dltest ld-elf.so.1: assert failed: /usr/src/libexec/rtld-elf/rtld.c:2445 Segmentation fault (core dumped) % cc -Wall -o dltest dltest.c -lthr % ./dltest % ld-elf.so.1: assert failed: /usr/src/libexec/rtld-elf/rtld.c:1723 Abort (core dumped) Hmm, it seems dlopen() and dlclose() are not MT-safe. Is this a known issue? -- Kazuaki Oda
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?44215FE9.2070602>