/** Cancel a thread that holds a lock on a mutex. */


#include <assert.h>
#include <pthread.h>
#include <stdio.h>


pthread_cond_t  s_cond;
pthread_mutex_t s_mutex1;
pthread_mutex_t s_mutex2;


static void* thread(void* arg)
{
  /* Lock s_mutex2. */
  pthread_mutex_lock(&s_mutex2);
  /* Inform the main thread that s_mutex2 has been locked, and wait for pthread_cancel(). */
  pthread_mutex_lock(&s_mutex1);
  pthread_cond_signal(&s_cond);
  pthread_cond_wait(&s_cond, &s_mutex1);
  return 0;
}

int main(int argc, char** argv)
{
  pthread_t tid;

  /* Initialize synchronization objects. */
  pthread_cond_init(&s_cond, 0);
  pthread_mutex_init(&s_mutex1, 0);
  pthread_mutex_init(&s_mutex2, 0);

  /* Create thread. */
  pthread_mutex_lock(&s_mutex1);
  pthread_create(&tid, 0, &thread, 0);

  /* Wait until the created thread has locked s_mutex2. */
  pthread_cond_wait(&s_cond, &s_mutex1);
  pthread_mutex_unlock(&s_mutex1);

  /* Cancel the created thread. */
  pthread_cancel(tid);

  /* Join the created thread. */
  pthread_join(tid, 0);

  /* Invoke pthread_cancel() with an invalid thread ID. */
  pthread_cancel(tid);

  fprintf(stderr, "Test finished.\n");

  return 0;
}
