Fix pthread_getcpuclockid.
clock_gettime was returning EINVAL for the values produced by pthread_getcpuclockid. Bug: 10346183 Change-Id: Iabe643d7d46110bb311a0367aa0fc737f653208e
This commit is contained in:
@@ -36,7 +36,13 @@ int pthread_getcpuclockid(pthread_t t, clockid_t* clockid) {
|
||||
return ESRCH;
|
||||
}
|
||||
|
||||
enum { CLOCK_IDTYPE_BITS = 3 };
|
||||
*clockid = CLOCK_THREAD_CPUTIME_ID | (thread->tid << CLOCK_IDTYPE_BITS);
|
||||
// The tid is stored in the top bits, but negated.
|
||||
clockid_t result = ~static_cast<clockid_t>(thread->tid) << 3;
|
||||
// Bits 0 and 1: clock type (0 = CPUCLOCK_PROF, 1 = CPUCLOCK_VIRT, 2 = CPUCLOCK_SCHED).
|
||||
result |= 2;
|
||||
// Bit 2: thread (set) or process (clear)?
|
||||
result |= (1 << 2);
|
||||
|
||||
*clockid = result;
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user