Date: Wed, 12 Aug 1998 22:06:55 GMT From: loschert@servint.com To: FreeBSD-gnats-submit@FreeBSD.ORG Subject: misc/7600: Pthreads Bug - Interaction between printf and pthread_self Message-ID: <199808122206.WAA00865@test.accucount.com>
next in thread | raw e-mail | index | archive | help
>Number: 7600
>Category: misc
>Synopsis: Pthreads Bug - Interaction between printf and pthread_self
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Wed Aug 12 19:10:01 PDT 1998
>Last-Modified:
>Originator: Matt Loschert
>Organization:
ServInt Internet Services
>Release: FreeBSD 2.2.7-STABLE i386
>Environment:
FreeBSD 2.2.7-STABLE #0: Thu Jul 23 10:04:36 GMT 1998
>Description:
While testing a couple of server apps that I had written, I discovered that in certain situations, the process would "run-away". At that point, the app could only be killed with a kill -9 and top would show that the process was eating up 99.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 exiting 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 not 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----
>Fix:
Don't know, hope this helps though.
>Audit-Trail:
>Unformatted:
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?199808122206.WAA00865>
