Date: Thu, 13 Aug 1998 11:00:01 -0700 (PDT) From: Jin Guojun (ITG staff) <jin@george.lbl.gov> To: freebsd-bugs@FreeBSD.ORG Subject: Re: misc/7600: Pthreads Bug - Interaction between printf and pthread_self Message-ID: <199808131800.LAA28933@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR misc/7600; it has been noted by GNATS. From: Jin Guojun (ITG staff) <jin@george.lbl.gov> To: FreeBSD-gnats-submit@FreeBSD.ORG, loschert@servint.com Cc: Subject: Re: misc/7600: Pthreads Bug - Interaction between printf and pthread_self Date: Thu, 13 Aug 1998 10:53:24 -0700 (PDT) The problem is no in "3 Exit the shell.". It is related to either rexec/rsh or xterm. I tried followings, and only exit xterm will cause the same problem: % sh $ ./bug & ^D % top # everything is OK % csh % ./bug & %^D % top # everything is OK % exit then log back in, bug is chewing CPU now. -Jin > >Description: > > While testing a couple of server apps that I had written, I discovered that in c > ertain situations, the process would "run-away". At that point, the app could o > nly be killed with a kill -9 and top would show that the process was eating up 9 > 9.9% of the cpu cycles. > > I found that the condition that instigated the problem was starting the app as a > background process and then exiting the shell. Almost immediately after exitin > g the shell, the process would go haywire. :) > > The apps use pthreads and therefore -libc_r. > > I attempted to isolate the problem this evening by stripping out extraneous code > . I was able to cut it down to the following program. The line that it does no > t like is the printf line that calls pthread_self to show the thread id. > > > >How-To-Repeat: > > 1. Compile the below code with the following command: > > gcc -Wall -o bug FILENAME.c -lc_r > > 2. Run the program in the background with: > > ./bug & > > 3. Exit the shell. > > 4. Log back in, check cpu usage with top. > > > > ----CODE BEGINS (FILENAME.c)---- > > > #include <stdio.h> > #include <unistd.h> > #include <pthread.h> > > void *newthread (void *vptr); > > > int main() > { > pthread_t thread; > > pthread_create (&thread, NULL, newthread, NULL); > pthread_join (thread, NULL); > exit(0); > } > > > void *newthread(void *vptr) > { > for(;;) { > printf("Thread %d: Just looped again.\n", (int) pthread_self()); > sleep(5); > } > } > > > ----CODE ENDS---- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199808131800.LAA28933>