(linenum→info "unix/slp.c:2238")

glibc/2.7/nptl/pthread_getcpuclockid.c

    1: /* Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
    2:    This file is part of the GNU C Library.
    3: 
    4:    The GNU C Library is free software; you can redistribute it and/or
    5:    modify it under the terms of the GNU Lesser General Public License as
    6:    published by the Free Software Foundation; either version 2.1 of the
    7:    License, or (at your option) any later version.
    8: 
    9:    The GNU C Library is distributed in the hope that it will be useful,
   10:    but WITHOUT ANY WARRANTY; without even the implied warranty of
   11:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   12:    Lesser General Public License for more details.
   13: 
   14:    You should have received a copy of the GNU Lesser General Public
   15:    License along with the GNU C Library; see the file COPYING.LIB.  If not,
   16:    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
   17:    Boston, MA 02111-1307, USA.  */
   18: 
   19: #include <errno.h>
   20: #include <pthreadP.h>
   21: #include <sys/time.h>
   22: #include <tls.h>
   23: 
   24: 
   25: int
   26: pthread_getcpuclockid (threadid, clockid)
   27:      pthread_t threadid;
   28:      clockid_t *clockid;
   29: {
   30:   struct pthread *pd = (struct pthread *) threadid;
   31: 
   32:   /* Make sure the descriptor is valid.  */
   33:   if (INVALID_TD_P (pd))
   34:     /* Not a valid thread handle.  */
   35:     return ESRCH;
   36: 
   37: #ifdef CLOCK_THREAD_CPUTIME_ID
   38:   /* We need to store the thread ID in the CLOCKID variable together
   39:      with a number identifying the clock.  We reserve the low 3 bits
   40:      for the clock ID and the rest for the thread ID.  This is
   41:      problematic if the thread ID is too large.  But 29 bits should be
   42:      fine.
   43: 
   44:      If some day more clock IDs are needed the ID part can be
   45:      enlarged.  The IDs are entirely internal.  */
   46:   if (pd->tid >= 1 << (8 * sizeof (*clockid) - CLOCK_IDFIELD_SIZE))
   47:     return ERANGE;
   48: 
   49:   /* Store the number.  */
   50:   *clockid = CLOCK_THREAD_CPUTIME_ID | (pd->tid << CLOCK_IDFIELD_SIZE);
   51: 
   52:   return 0;
   53: #else
   54:   /* We don't have a timer for that.  */
   55:   return ENOENT;
   56: #endif
   57: }
Syntax (Markdown)