support cputime clocks for processes/threads other than self

apparently these features have been in Linux for a while now, so it
makes sense to support them. the bit twiddling seems utterly illogical
and wasteful, especially the negation, but that's how the kernel folks
chose to encode pids/tids into the clock id.
This commit is contained in:
Rich Felker 2013-06-08 11:36:41 -04:00
parent 0996faa3d7
commit ea200e38bd
2 changed files with 7 additions and 3 deletions

View File

@ -2,5 +2,6 @@
int pthread_getcpuclockid(pthread_t t, clockid_t *clockid) int pthread_getcpuclockid(pthread_t t, clockid_t *clockid)
{ {
return ENOSYS; *clockid = (-t->tid-1)*8U + 6;
return 0;
} }

View File

@ -5,7 +5,10 @@
int clock_getcpuclockid(pid_t pid, clockid_t *clk) int clock_getcpuclockid(pid_t pid, clockid_t *clk)
{ {
if (pid && pid != getpid()) return EPERM; struct timespec ts;
*clk = CLOCK_PROCESS_CPUTIME_ID; clockid_t id = (-pid-1)*8U + 2;
int ret = __syscall(SYS_clock_getres, id, &ts);
if (ret) return -ret;
*clk = id;
return 0; return 0;
} }