This is the mail archive of the mailing list for the glibc project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Possible pthread_create issue (crash in __pthread_create_2_1 when spawning aggressively)

Hi folks!

With glibc 2.23 on Linux (tested platform: Ubuntu 16, 4.6.3), the
following stress program crashes inside __pthread_create_2_1. Expected
behavior would be either a successful thread creation, or an error
returned by pthread_create.

$ while /tmp/thread_stress; do :; done
Caught SEGV in pid 18158

[2]+  Stopped                 /tmp/thd

$ gdb -p 18158

(gdb) where
#0  0x00007f93280bd767 in kill () at ../sysdeps/unix/syscall-template.S:84
#1  0x0000000000400a1d in segv ()
#2  <signal handler called>
#3  __pthread_create_2_1 (newthread=<optimized out>, attr=<optimized
out>, start_routine=<optimized out>, arg=<optimized out>) at
#4  0x000000000040089e in main ()

I couldn't find any related issue on the bug tracker. Could someone
kindly confirm that this is the case with a recent glibc ?


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <sys/types.h>
#include <signal.h>

static void * func_pthread(void *u)
  return NULL;

static void segv(int sig)
  /* Technically we aren't allowed to use printf here (not async-signal safe) */
  printf("Caught SEGV in pid %d\n", getpid());

  /* Wait for a debugger */
  kill(getpid(), SIGSTOP);

void spawn_a_thread()
  /* Catch SEGV */
  signal(SIGSEGV, segv);

  /* Create detached */
  pthread_attr_t attr;
  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);

  pthread_t th;
  int ret;
  if( (ret = pthread_create(&th, &attr, func_pthread, NULL)))

int main(void)
  int i;
  for(i = 0; i < 32768; i++) {

  return EXIT_SUCCESS;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]