Back to index

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

Go to the source code of this file.

Functions

int timer_gettime (timer_t timerid, struct itimerspec *value)

Function Documentation

int timer_gettime ( timer_t  timerid,
struct itimerspec *  value 
)

Definition at line 29 of file timer_gettime.c.

{
  struct timer_node *timer;
  struct timespec now, expiry;
  int retval = -1, armed = 0, valid;
  clock_t clock = 0;

  pthread_mutex_lock (&__timer_mutex);

  timer = timer_id2ptr (timerid);
  valid = timer_valid (timer);

  if (valid) {
    armed = timer->armed;
    expiry = timer->expirytime;
    clock = timer->clock;
    value->it_interval = timer->value.it_interval;
  }

  pthread_mutex_unlock (&__timer_mutex);

  if (valid)
    {
      if (armed)
       {
         clock_gettime (clock, &now);
         if (timespec_compare (&now, &expiry) < 0)
           timespec_sub (&value->it_value, &expiry, &now);
         else
           {
             value->it_value.tv_sec = 0;
             value->it_value.tv_nsec = 0;
           }
       }
      else
       {
         value->it_value.tv_sec = 0;
         value->it_value.tv_nsec = 0;
       }

      retval = 0;
    }
  else
    __set_errno (EINVAL);

  return retval;
}

Here is the call graph for this function: