From 9e493fb5231c85032d0a86a114bde982aaa19516 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Thu, 1 Dec 2005 18:34:09 +0000 Subject: [PATCH] tsleep_interlock() must be called prior to testing the serializer lock state, otherwise a serializer wakeup on another cpu may race our tsleep(). Reported-by: Emiel Kollof --- sys/kern/lwkt_serialize.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sys/kern/lwkt_serialize.c b/sys/kern/lwkt_serialize.c index e6c847ecdb..635956b599 100644 --- a/sys/kern/lwkt_serialize.c +++ b/sys/kern/lwkt_serialize.c @@ -31,7 +31,7 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $DragonFly: src/sys/kern/lwkt_serialize.c,v 1.8 2005/11/23 22:54:22 dillon Exp $ + * $DragonFly: src/sys/kern/lwkt_serialize.c,v 1.9 2005/12/01 18:34:09 dillon Exp $ */ /* * This API provides a fast locked-bus-cycle-based serializer. It's @@ -194,6 +194,7 @@ lwkt_serialize_sleep(void *info) { lwkt_serialize_t s = info; crit_enter(); + tsleep_interlock(s); if (atomic_intr_cond_test(&s->interlock) != 0) tsleep(s, 0, "slize", 0); crit_exit(); -- 2.41.0