• R
    add proper fuxed-based locking for stdio · dba68bf9
    Rich Felker 提交于
    previously, stdio used spinlocks, which would be unacceptable if we
    ever add support for thread priorities, and which yielded
    pathologically bad performance if an application attempted to use
    flockfile on a key file as a major/primary locking mechanism.
    
    i had held off on making this change for fear that it would hurt
    performance in the non-threaded case, but actually support for
    recursive locking had already inflicted that cost. by having the
    internal locking functions store a flag indicating whether they need
    to perform unlocking, rather than using the actual recursive lock
    counter, i was able to combine the conditionals at unlock time,
    eliminating any additional cost, and also avoid a nasty corner case
    where a huge number of calls to ftrylockfile could cause deadlock
    later at the point of internal locking.
    
    this commit also fixes some issues with usage of pthread_self
    conflicting with __attribute__((const)) which resulted in crashes with
    some compiler versions/optimizations, mainly in flockfile prior to
    pthread_create.
    dba68bf9
__fdopen.c 1.3 KB