diff options
author | attilio <attilio@FreeBSD.org> | 2010-01-18 14:43:44 +0000 |
---|---|---|
committer | attilio <attilio@FreeBSD.org> | 2010-01-18 14:43:44 +0000 |
commit | 5fcd322a258801641a2695545efcab9501a0cd37 (patch) | |
tree | 29709102e329809b88986c1b346983ccccdbc4eb /sys/amd64 | |
parent | 6cec00d040aa95e296cf0160e205596abfcc3f61 (diff) | |
download | FreeBSD-src-5fcd322a258801641a2695545efcab9501a0cd37.zip FreeBSD-src-5fcd322a258801641a2695545efcab9501a0cd37.tar.gz |
MFC r200447,201703,201709-201710:
In current code, threads performing an interruptible sleep
will leave the waiters flag on forcing the owner to do a wakeup even
when the waiter queue is empty.
That operation may lead to a deadlock in the case of doing a fake wakeup
on the "preferred" queue while the other queue has real waiters on it,
because nobody is going to wakeup the 2nd queue waiters and they will
sleep indefinitively.
A similar bug, is present, for lockmgr in the case the waiters are
sleeping with LK_SLEEPFAIL on.
Add a sleepqueue interface which does report the actual number of waiters
on a specified queue of a waitchannel and track if at least one sleepfail
waiter is present or not. In presence of this or empty "preferred" queue,
wakeup both waiters queues.
Discussed with: kib
Tested by: Pete French <petefrench at ticketswitch dot com>,
Justin Head <justin at encarnate dot com>
Diffstat (limited to 'sys/amd64')
0 files changed, 0 insertions, 0 deletions