mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-28 00:21:52 +03:00
Remove __ASSUME_POSIX_CPU_TIMERS.
This commit is contained in:
@ -29,60 +29,24 @@
|
||||
int
|
||||
clock_getcpuclockid (pid_t pid, clockid_t *clock_id)
|
||||
{
|
||||
#ifdef __NR_clock_getres
|
||||
/* The clockid_t value is a simple computation from the PID.
|
||||
But we do a clock_getres call to validate it. */
|
||||
|
||||
const clockid_t pidclock = MAKE_PROCESS_CPUCLOCK (pid, CPUCLOCK_SCHED);
|
||||
|
||||
# if !(__ASSUME_POSIX_CPU_TIMERS > 0)
|
||||
extern int __libc_missing_posix_cpu_timers attribute_hidden;
|
||||
if (!__libc_missing_posix_cpu_timers)
|
||||
# endif
|
||||
INTERNAL_SYSCALL_DECL (err);
|
||||
int r = INTERNAL_SYSCALL (clock_getres, err, 2, pidclock, NULL);
|
||||
if (!INTERNAL_SYSCALL_ERROR_P (r, err))
|
||||
{
|
||||
INTERNAL_SYSCALL_DECL (err);
|
||||
int r = INTERNAL_SYSCALL (clock_getres, err, 2, pidclock, NULL);
|
||||
if (!INTERNAL_SYSCALL_ERROR_P (r, err))
|
||||
{
|
||||
*clock_id = pidclock;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (INTERNAL_SYSCALL_ERRNO (r, err) == EINVAL)
|
||||
{
|
||||
# if !(__ASSUME_POSIX_CPU_TIMERS > 0)
|
||||
if (pidclock == MAKE_PROCESS_CPUCLOCK (0, CPUCLOCK_SCHED)
|
||||
|| INTERNAL_SYSCALL_ERROR_P (INTERNAL_SYSCALL
|
||||
(clock_getres, err, 2,
|
||||
MAKE_PROCESS_CPUCLOCK
|
||||
(0, CPUCLOCK_SCHED), NULL),
|
||||
err))
|
||||
/* The kernel doesn't support these clocks at all. */
|
||||
__libc_missing_posix_cpu_timers = 1;
|
||||
else
|
||||
# endif
|
||||
/* The clock_getres system call checked the PID for us. */
|
||||
return ESRCH;
|
||||
}
|
||||
else
|
||||
return INTERNAL_SYSCALL_ERRNO (r, err);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* We don't allow any process ID but our own. */
|
||||
if (pid != 0 && pid != getpid ())
|
||||
return EPERM;
|
||||
|
||||
#ifdef CLOCK_PROCESS_CPUTIME_ID
|
||||
if (HAS_CPUCLOCK)
|
||||
{
|
||||
/* Store the number. */
|
||||
*clock_id = CLOCK_PROCESS_CPUTIME_ID;
|
||||
|
||||
*clock_id = pidclock;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* We don't have a timer for that. */
|
||||
return ENOENT;
|
||||
if (INTERNAL_SYSCALL_ERRNO (r, err) == EINVAL)
|
||||
{
|
||||
/* The clock_getres system call checked the PID for us. */
|
||||
return ESRCH;
|
||||
}
|
||||
else
|
||||
return INTERNAL_SYSCALL_ERRNO (r, err);
|
||||
}
|
||||
|
Reference in New Issue
Block a user