Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 20 Apr 2011 14:19:34 +0000 (UTC)
From:      Ryan Stone <rstone@FreeBSD.org>
To:        cvs-src-old@freebsd.org
Subject:   cvs commit: src/lib/libthr/thread thr_once.c
Message-ID:  <201104201419.p3KEJfOk016008@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
rstone      2011-04-20 14:19:34 UTC

  FreeBSD src repository

  Modified files:
    lib/libthr/thread    thr_once.c 
  Log:
  SVN rev 220888 on 2011-04-20 14:19:34Z by rstone
  
  r179417 introduced a bug into pthread_once().  Previously pthread_once()
  used a global pthread_mutex_t for synchronization.  r179417 replaced that
  with an implementation that directly used atomic instructions and thr_*
  syscalls to synchronize callers to pthread_once.  However, calling
  pthread_mutex_lock on the global mutex implicitly ensured that
  _thr_check_init() had been called but with r179417 this was no longer
  guaranteed.  This meant that if you were unlucky enough to have your first
  call into libthr be a call to pthread_once(), you would segfault when
  trying to access the pointer returned by _get_curthread().
  
  The fix is to explicitly call _thr_check_init() from pthread_once().
  
  Reviewed by:    davidxu
  Approved by:    emaste (mentor)
  MFC after:      1 week
  
  Revision  Changes    Path
  1.8       +2 -0      src/lib/libthr/thread/thr_once.c



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201104201419.p3KEJfOk016008>