I tried to write a semaphore test and it always segfaulted while printing an
error.

Attaching a simple error printing program that segfaults (after pthread_create)
for me.

-- 
Michal Suchanek
[EMAIL PROTECTED]
#define _GNU_SOURCE

#include <pthread.h>
#include <semaphore.h>
#include <unistd.h>
#include <error.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>

#define THREADS 500


void *
foo (void *arg)
{
  error (0, EGREGIOUS, "Message foo");
  error (0, EGREGIOUS, "Int1 %i Int2 %i", 1, 2);
  return NULL;
}

int
main (int argc, char **argv)
{
  error_t err;
  pthread_t tid;
  void * ret;

  fprintf (stderr, "This should print a bunch of error messages.\n\n");

  error (0, EGREGIOUS, "Message start");
  error (0, EGREGIOUS, "Int1 %i Int2 %i", 1, 2);

  error (0, EGREGIOUS, "Message init");
  error (0, EGREGIOUS, "Int1 %i Int2 %i", 1, 2);

  err = pthread_create (&tid, NULL, foo, NULL);
  if (err)
    error (0, errno, "pthread_create");
  error (0, EGREGIOUS, "Message create");
  error (0, EGREGIOUS, "Int1 %i Int2 %i", 1, 2);

  sched_yield();
  error (0, EGREGIOUS, "Message yield");
  error (0, EGREGIOUS, "Int1 %i Int2 %i", 1, 2);

  err = pthread_join (tid, &ret);
  if (err)
    error (0, errno, "pthread_join");
  error (0, EGREGIOUS, "Message join");
  error (0, EGREGIOUS, "Int1 %i Int2 %i", 1, 2);
  if ((int)ret)
    error (0, EGREGIOUS, "Main: Thread return value %i should be 0", (int)ret);

  return 0;
}

Reply via email to