|
Message-ID: <20150812140427.GB31018@brightrain.aerifal.cx> Date: Wed, 12 Aug 2015 10:04:27 -0400 From: Rich Felker <dalias@...c.org> To: musl@...ts.openwall.com Subject: Re: Thread hangs up when calling exit() On Wed, Aug 12, 2015 at 04:36:20PM +0300, Eugene wrote: > 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. As far as I can tell this is the required behavior specified by POSIX. I raised a related issue with the standards body in 2012 and the effects on exit were deemed intentional. See: http://austingroupbugs.net/view.php?id=611 Rich
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.