From d29ac5afdb063d7284ae0b89b918407acb421d56 Mon Sep 17 00:00:00 2001 From: Samy Al Bahra Date: Fri, 11 Jan 2013 21:27:43 -0500 Subject: [PATCH] ck_bytelock: Fix downgrade path from writer to reader. An off-by-one was introduced in downgrade path from writer. This can cause deadlock if a writer downgrades from a write lock. Pointed out by Jeffrey Birnbaum . --- include/ck_bytelock.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/ck_bytelock.h b/include/ck_bytelock.h index 4e2807e..facc2ba 100644 --- a/include/ck_bytelock.h +++ b/include/ck_bytelock.h @@ -124,7 +124,7 @@ ck_bytelock_read_lock(struct ck_bytelock *bytelock, unsigned int slot) { if (ck_pr_load_uint(&bytelock->owner) == slot) { - ck_pr_store_8(&bytelock->readers[slot], true); + ck_pr_store_8(&bytelock->readers[slot - 1], true); ck_pr_fence_strict_store(); ck_pr_store_uint(&bytelock->owner, 0); return;