1. 25 10月, 2012 1 次提交
    • R
      correct locking in stdio functions that tried to be lock-free · c8cb6bcd
      Rich Felker 提交于
      these functions must behave as if they obtain the lock via flockfile
      to satisfy POSIX requirements. since another thread can provably hold
      the lock when they are called, they must wait to obtain the lock
      before they can return, even if the correct return value could be
      obtained without locking. in the case of fclose and freopen, failure
      to do so could cause correct (albeit obscure) programs to crash or
      otherwise misbehave; in the case of feof, ferror, and fwide, failure
      to obtain the lock could sometimes return incorrect results. in any
      case, having these functions proceed and return while another thread
      held the lock was wrong.
      c8cb6bcd
  2. 12 8月, 2012 1 次提交
    • R
      add bsd fgetln function · 61718273
      Rich Felker 提交于
      optimized to avoid allocation and return lines directly out of the
      stream buffer whenever possible.
      61718273
  3. 30 7月, 2011 1 次提交
    • 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
  4. 02 5月, 2011 2 次提交
  5. 12 2月, 2011 1 次提交