diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2017-02-13 19:12:44 +0100 |
---|---|---|
committer | Stefan Hajnoczi <stefanha@redhat.com> | 2017-02-21 11:39:40 +0000 |
commit | a7b91d35bab97a2d3e779d0c64c9b837b52a6cf7 (patch) | |
tree | adb74f4b9f4dd306e33196dc2107aeabe7e9a42a /include/qemu | |
parent | 1ace7ceac507d90d50ecb2e13f7222beadb64d92 (diff) | |
download | qemu-a7b91d35bab97a2d3e779d0c64c9b837b52a6cf7.zip qemu-a7b91d35bab97a2d3e779d0c64c9b837b52a6cf7.tar.gz qemu-a7b91d35bab97a2d3e779d0c64c9b837b52a6cf7.tar.bz2 |
coroutine-lock: make CoRwlock thread-safe and fair
This adds a CoMutex around the existing CoQueue. Because the write-side
can just take CoMutex, the old "writer" field is not necessary anymore.
Instead of removing it altogether, count the number of pending writers
during a read-side critical section and forbid further readers from
entering.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Message-id: 20170213181244.16297-7-pbonzini@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'include/qemu')
-rw-r--r-- | include/qemu/coroutine.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/include/qemu/coroutine.h b/include/qemu/coroutine.h index d2de268..e60beaf 100644 --- a/include/qemu/coroutine.h +++ b/include/qemu/coroutine.h @@ -204,8 +204,9 @@ bool qemu_co_queue_empty(CoQueue *queue); typedef struct CoRwlock { - bool writer; + int pending_writer; int reader; + CoMutex mutex; CoQueue queue; } CoRwlock; |