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>
index | next in thread | raw e-mail
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
home |
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199808131800.LAA28933>
