public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Possible 2.6.24-rc7 issue w/respect to pthreads
@ 2008-01-09 10:35 tom
  2008-01-09 10:51 ` Marc Kleine-Budde
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: tom @ 2008-01-09 10:35 UTC (permalink / raw)
  To: linux-kernel

[-- Attachment #1: Type: text/plain, Size: 1195 bytes --]

To Whom It May Concern,

After I patched my 2.6.23 kernel to 2.6.24-rc7 this morning, I noticed
some odd behavior with respect to POSIX threads in a test program I had
written (originally to test epoll.)

The behavior is as follows:

1.  main() creates a new thread of execution with pthread_create
2.  thread_func() immediately calls pthread_detach(), which is supposed to
ensure that thread resources are cleaned up when the thread terminates.
3.  The spawned thread sleeps and then prints a message "got here"
4.  The main thread calls pthread_join().  According to the POSIX
documentation, this should suspend execution until the spawned thread has
terminated.

What I'm seeing is that the main thread terminates immediately.  If I
comment out the call to pthread_detach(), the program runs normally.  If I
boot with my 2.6.23 kernel, the program runs normally.

I'm not sure if this is some oversight on my part but similar programs
operate correctly on my Debian etch installation with 2.6.18 as well as
with the newer 23 kernel, but not with the patch.

If you have any questions, don't hesitate to email me; my address is
provided below.

See Attached (bug.c)

Tom R. Dial
tom@kavaga.com

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: bug.c --]
[-- Type: text/x-csrc; name="bug.c", Size: 1540 bytes --]

//
// bug.c
//
// Author: Tom R. Dial  <tom@kavaga.com>
//
// This simple program demonstrates what I believe to be a problem
// with the 2.6.24-rc7 kernel.  thread_func() starts by calling
// pthread_detach(), which according to POSIX (as I read it) is
// *supposed* to ensure that thread resources are cleaned up when
// the thread terminates.  This seemed to work in 2.6.23, but when
// I applied the patch for rc7, I noticed that main() seems to
// terminate immediately.  The sample program sleeps and prints
// a message from the spawned thread.  The call to pthread_join()
// in main should ensure that this message gets printed.  If the
// call to pthread_detach() is commented out, the program functions
// as expected and prints the "got here" message.  If the call
// to pthread_detach() is made, the program exits immediately
// without printing the error message.
//
// gcc -Wall -lpthread -o bug bug.c

#include <errno.h>
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>

void* thread_func(void* param)
{
   int ptd = 0;
   ptd = pthread_detach( pthread_self() );
   //printf("pthread_detach() returned %d, errno=%d\n", ptd, errno );
   sleep( 10 );
   printf("got here\n");
   return 0;
}

int main(int argc, char** argv)
{
   pthread_t thread = 0;
   int status = 0;
   
   status = pthread_create( &thread, 0, thread_func, 0 );
   if (status < 0)
   {
      printf( "pthread_create() returned %d, errno=%d\n", status, errno );
      return 0;            
   }
   
   pthread_join( thread, 0 );
   
   return 0;
}

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2008-01-09 11:07 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-01-09 10:35 Possible 2.6.24-rc7 issue w/respect to pthreads tom
2008-01-09 10:51 ` Marc Kleine-Budde
2008-01-09 10:53 ` Jakub Jelinek
2008-01-09 11:07 ` Eric Dumazet

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox