summaryrefslogtreecommitdiffstats
path: root/include/qemu/coroutine_int.h
diff options
context:
space:
mode:
authorKevin Wolf2016-08-11 17:51:59 +0200
committerKevin Wolf2016-09-05 19:06:48 +0200
commit1b7f01d966f97b7820f3cdd471461cf0799a93cc (patch)
treeaaf94f449ee10f7eb018b5f9987e6f1205036c68 /include/qemu/coroutine_int.h
parentcoroutine: Let CoMutex remember who holds it (diff)
downloadqemu-1b7f01d966f97b7820f3cdd471461cf0799a93cc.tar.gz
qemu-1b7f01d966f97b7820f3cdd471461cf0799a93cc.tar.xz
qemu-1b7f01d966f97b7820f3cdd471461cf0799a93cc.zip
coroutine: Assert that no locks are held on termination
A coroutine that takes a lock must also release it again. If the coroutine terminates without having released all its locks, it's buggy and we'll probably run into a deadlock sooner or later. Make sure that we don't get such cases. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'include/qemu/coroutine_int.h')
-rw-r--r--include/qemu/coroutine_int.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/include/qemu/coroutine_int.h b/include/qemu/coroutine_int.h
index 581a7f5140..6df9d33352 100644
--- a/include/qemu/coroutine_int.h
+++ b/include/qemu/coroutine_int.h
@@ -39,6 +39,7 @@ struct Coroutine {
void *entry_arg;
Coroutine *caller;
QSLIST_ENTRY(Coroutine) pool_next;
+ size_t locks_held;
/* Coroutines that should be woken up when we yield or terminate */
QSIMPLEQ_HEAD(, Coroutine) co_queue_wakeup;