|
Message-ID: <55CB4BD4.5050200@ndmsystems.com> Date: Wed, 12 Aug 2015 16:36:20 +0300 From: Eugene <e.yudin@...systems.com> To: musl@...ts.openwall.com Subject: Thread hangs up when calling exit() Hello, I have problem with threads. Main thread waits for input through function fgets(). Other thread calls function exit() and hangs up. Main thread continues working. Musl version: 1.1.10. Example: #include <pthread.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> void *func(void *arg) { printf("New thread...\n"); sleep(5); exit(EXIT_SUCCESS); return (void *) 0; } int main(int argc, char *argv[]) { char buf[100]; int res = EXIT_FAILURE, ret; pthread_t tid; ret = pthread_create(&tid, NULL, func, NULL); if (ret) { fprintf(stderr, "pthread_create: %s\n", strerror(ret)); goto out; } while (fgets(buf, sizeof buf, stdin) != NULL) printf("buf = %s\n", buf); res = EXIT_SUCCESS; out: return res; } Expected result: program exits. Actual results: main thread continues working. Correct behavior may be obtained with following patch: diff --git a/src/stdio/__stdio_exit.c b/src/stdio/__stdio_exit.c index 191b445..71a9677 100644 --- a/src/stdio/__stdio_exit.c +++ b/src/stdio/__stdio_exit.c @@ -17,7 +17,7 @@ void __stdio_exit(void) { FILE *f; for (f=*__ofl_lock(); f; f=f->next) close_file(f); - close_file(__stdin_used); + //close_file(__stdin_used); close_file(__stdout_used); } Maybe "__stdin_used" must be replaced with "__stderr_used"? It's looking strange for me to write and seek stdin in function close_file(). Function fgets() obtains lock via macro FLOCK. close_file() in "__stdio_exit.c" tries to obtain the same lock. It leads to thread hangup. Eugene
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.