Skip site navigation (1)Skip section navigation (2)
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>