Back to index

glibc  2.9
Functions
pthread_getcpuclockid.c File Reference
#include <errno.h>
#include <pthreadP.h>
#include <sys/time.h>
#include <tls.h>

Go to the source code of this file.

Functions

int pthread_getcpuclockid (pthread_t threadid, clockid_t *clockid)

Function Documentation

int pthread_getcpuclockid ( pthread_t  threadid,
clockid_t *  clockid 
)

Definition at line 26 of file pthread_getcpuclockid.c.

{
  struct pthread *pd = (struct pthread *) threadid;

  /* Make sure the descriptor is valid.  */
  if (INVALID_TD_P (pd))
    /* Not a valid thread handle.  */
    return ESRCH;

#ifdef CLOCK_THREAD_CPUTIME_ID
  /* We need to store the thread ID in the CLOCKID variable together
     with a number identifying the clock.  We reserve the low 3 bits
     for the clock ID and the rest for the thread ID.  This is
     problematic if the thread ID is too large.  But 29 bits should be
     fine.

     If some day more clock IDs are needed the ID part can be
     enlarged.  The IDs are entirely internal.  */
  if (pd->tid >= 1 << (8 * sizeof (*clockid) - CLOCK_IDFIELD_SIZE))
    return ERANGE;

  /* Store the number.  */
  *clockid = CLOCK_THREAD_CPUTIME_ID | (pd->tid << CLOCK_IDFIELD_SIZE);

  return 0;
#else
  /* We don't have a timer for that.  */
  return ENOENT;
#endif
}