5
#include <internaltypes.h>
8
# define SEM_WAIT(s) sem_wait (s)
28
if (sem_init (&s, 0, 0) != 0)
30
puts ("sem_init failed");
34
struct new_sem *is = (struct new_sem *) &s;
36
if (is->nwaiters != 0)
38
puts ("nwaiters not initialized");
42
if (pthread_create (&th, NULL, tf, &s) != 0)
44
puts ("pthread_create failed");
50
if (pthread_cancel (th) != 0)
52
puts ("pthread_cancel failed");
57
if (pthread_join (th, &r) != 0)
59
puts ("pthread_join failed");
62
if (r != PTHREAD_CANCELED && --tries > 0)
64
/* Maybe we get the scheduling right the next time. */
69
if (is->nwaiters != 0)
71
puts ("nwaiters not reset");