diff options
author | attilio <attilio@FreeBSD.org> | 2007-06-26 21:42:01 +0000 |
---|---|---|
committer | attilio <attilio@FreeBSD.org> | 2007-06-26 21:42:01 +0000 |
commit | 6b276781fad7a061344301ba071e88e9822c50ba (patch) | |
tree | dfed61b9a1bfce96b75b75f2b621da64cccf888a /lib/libc | |
parent | 15389329a0e4e6702f7710bd904131886e2a6d1d (diff) | |
download | FreeBSD-src-6b276781fad7a061344301ba071e88e9822c50ba.zip FreeBSD-src-6b276781fad7a061344301ba071e88e9822c50ba.tar.gz |
Fix an old standing LOR between callout_lock and sleepqueues chain (which
could lead to a deadlock).
- sleepq_set_timeout acquires callout_lock (via callout_reset()) only
with sleepq chain lock held
- msleep_spin in _callout_stop_safe lock the sleepqueue chain with
callout_lock held
In order to solve this don't use msleep_spin in _callout_stop_safe() but
use directly sleepqueues as inline msleep_spin code. Rearrange the
wakeup path in order to have it consistent too.
Reported by: kris (via stress2 test suite)
Tested by: Timothy Redaelli <drizzt@gufi.org>
Reviewed by: jhb
Approved by: jeff (mentor)
Approved by: re
Diffstat (limited to 'lib/libc')
0 files changed, 0 insertions, 0 deletions