Back to index

glibc  2.9
timer_delete.c File Reference
#include <assert.h>
#include <errno.h>
#include <pthread.h>
#include <time.h>
#include "posix-timer.h"

Go to the source code of this file.


int timer_delete (timer_t timerid)

Function Documentation

int timer_delete ( timer_t  timerid)

Definition at line 30 of file timer_delete.c.

  struct timer_node *timer;
  int retval = -1;

  pthread_mutex_lock (&__timer_mutex);

  timer = timer_id2ptr (timerid);
  if (! timer_valid (timer))
    /* Invalid timer ID or the timer is not in use.  */
    __set_errno (EINVAL);
      if (timer->armed && timer->thread != NULL)
         struct thread_node *thread = timer->thread;
         assert (thread != NULL);

         /* If thread is cancelled while waiting for handler to terminate,
            the mutex is unlocked and timer_delete is aborted.  */
         pthread_cleanup_push (__timer_mutex_cancel_handler, &__timer_mutex);

         /* If timer is currently being serviced, wait for it to finish.  */
         while (thread->current_timer == timer)
           pthread_cond_wait (&thread->cond, &__timer_mutex);

         pthread_cleanup_pop (0);

      /* Remove timer from whatever queue it may be on and deallocate it.  */
      timer->inuse = TIMER_DELETED;
      list_unlink_ip (&timer->links);
      timer_delref (timer);
      retval = 0;

  pthread_mutex_unlock (&__timer_mutex);

  return retval;

Here is the call graph for this function:

Here is the caller graph for this function: