git: kernel - Add lock canceling features
dillon at crater.dragonflybsd.org
Sat Nov 22 00:25:04 PST 2014
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Sat Nov 22 00:10:19 2014 -0800
kernel - Add lock canceling features
* The current (typically exclusive) lock holder can enable cancel mode
by executing lockmgr(lk, LK_CANCEL_BEG, 0). This call always succeeds.
The lock state is not otherwise affected.
Any current threads blocked on the lock or any future thread which
attempts to gain the lock, who also specify the LK_CANCELABLE flag,
will be canceled as long as cancel mode is active and their operation
will return ENOLCK.
NOTE! Threads which do not specify LK_CANCELABLE are not affected by
cancel mode and their blocking locks will block normally.
WARNING! Cancel mode is not stackable. The system will panic if you
enable cancel mode on a lock where it is already enabled.
* The current (typically exclusive) lock holder can terminate cancel mode
by executing lockmgr(lk, LK_CANCEL_END, 0). This call always succeeds.
Once canceled, any other threads that would block on the lock and specify
the LK_CANCELABLE flag will block normally and not be canceled.
The current lock holder can also terminate cancel mode by simply releasing
the last lock with LK_RELEASE. That is, a release where the lock count
returns to 0.
* Lock canceling is an optional feature. Your lock cannot be canceled unless
you specify LK_CANCELABLE.
Summary of changes:
sys/kern/kern_lock.c | 119 ++++++++++++++++++++++++++++++++++++++++++++++---
sys/kern/kern_sysctl.c | 2 +-
sys/sys/lock.h | 90 +++++++++++++++++++++++++------------
3 files changed, 175 insertions(+), 36 deletions(-)
DragonFly BSD source repository
More information about the Commits