New functions to get kernel thread Id + serialisable task Id
authorDuncan Coutts <duncan@well-typed.com>
Tue, 3 Jul 2012 18:18:46 +0000 (19:18 +0100)
committerMikolaj Konarski <mikolaj@well-typed.com>
Fri, 6 Jul 2012 22:28:19 +0000 (00:28 +0200)
commit647ae1cfbb5ea3e2d3b1541c2bc12ea5db321134
tree9f40458a21ee74661b95ae43c0c61bc5e3a8e08f
parent01386d383fa535a16ccf6117adaffdd38af703ca
New functions to get kernel thread Id + serialisable task Id

On most platforms the userspace thread type (e.g. pthread_t) and kernel
thread id are different. Normally we don't care about kernel thread Ids,
but some system tools for tracing/profiling etc report kernel ids.
For example Solaris and OSX's DTrace and Linux's perf tool report kernel
thread ids. To be able to match these up with RTS's OSThread we need a
way to get at the kernel thread, so we add a new function for to do just
that (the implementation is system-dependent).

Additionally, strictly speaking the OSThreadId type, used as task ids,
is not a serialisable representation. On unix OSThreadId is a typedef for
pthread_t, but pthread_t is not guaranteed to be a numeric type.
Indeed on some systems pthread_t is a pointer and in principle it
could be a structure type. So we add another new function to get a
serialisable representation of an OSThreadId. This is only for use
in log files. We use the function to serialise an id of a task,
with the extra feature that it works in non-threaded builds
by always returning 1.
includes/rts/OSThreads.h
rts/Task.c
rts/Task.h
rts/posix/OSThreads.c
rts/win32/OSThreads.c