• R
    eliminate use of cached pid from thread structure · 83dc6eb0
    Rich Felker 提交于
    the main motivation for this change is to remove the assumption that
    the tid of the main thread is also the pid of the process. (the value
    returned by the set_tid_address syscall was used to fill both fields
    despite it semantically being the tid.) this is historically and
    presently true on linux and unlikely to change, but it conceivably
    could be false on other systems that otherwise reproduce the linux
    syscall api/abi.
    
    only a few parts of the code were actually still using the cached pid.
    in a couple places (aio and synccall) it was a minor optimization to
    avoid a syscall. caching could be reintroduced, but lazily as part of
    the public getpid function rather than at program startup, if it's
    deemed important for performance later. in other places (cancellation
    and pthread_kill) the pid was completely unnecessary; the tkill
    syscall can be used instead of tgkill. this is actually a rather
    subtle issue, since tgkill is supposedly a solution to race conditions
    that can affect use of tkill. however, as documented in the commit
    message for commit 7779dbd2, tgkill
    does not actually solve this race; it just limits it to happening
    within one process rather than between processes. we use a lock that
    avoids the race in pthread_kill, and the use in the cancellation
    signal handler is self-targeted and thus not subject to tid reuse
    races, so both are safe regardless of which syscall (tgkill or tkill)
    is used.
    83dc6eb0
lio_listio.c 2.6 KB