• R
    use a dedicated futex object for pthread_join instead of tid field · 9e2d820a
    Rich Felker 提交于
    the tid field in the pthread structure is not volatile, and really
    shouldn't be, so as not to limit the compiler's ability to reorder,
    merge, or split loads in code paths that may be relevant to
    performance (like controlling lock ownership).
    
    however, use of objects which are not volatile or atomic with futex
    wait is inherently broken, since the compiler is free to transform a
    single load into multiple loads, thereby using a different value for
    the controlling expression of the loop and the value passed to the
    futex syscall, leading the syscall to block instead of returning.
    
    reportedly glibc's pthread_join was actually affected by an equivalent
    issue in glibc on s390.
    
    add a separate, dedicated join_futex object for pthread_join to use.
    9e2d820a
__init_tls.c 3.2 KB