Skip to content
  • Duncan Coutts's avatar
    New functions to get kernel thread Id + serialisable task Id · 647ae1cf
    Duncan Coutts authored and Mikolaj Konarski's avatar Mikolaj Konarski committed
    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.
    647ae1cf