mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-11-05 20:35:44 +00:00
test-coroutine: test qemu_coroutine_entered()
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Fam Zheng <famz@redhat.com> Message-id: 1474989516-18255-3-git-send-email-stefanha@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
f643e469f3
commit
afe16f3f47
1 changed files with 42 additions and 0 deletions
|
@ -52,6 +52,47 @@ static void test_self(void)
|
|||
qemu_coroutine_enter(coroutine);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check that qemu_coroutine_entered() works
|
||||
*/
|
||||
|
||||
static void coroutine_fn verify_entered_step_2(void *opaque)
|
||||
{
|
||||
Coroutine *caller = (Coroutine *)opaque;
|
||||
|
||||
g_assert(qemu_coroutine_entered(caller));
|
||||
g_assert(qemu_coroutine_entered(qemu_coroutine_self()));
|
||||
qemu_coroutine_yield();
|
||||
|
||||
/* Once more to check it still works after yielding */
|
||||
g_assert(qemu_coroutine_entered(caller));
|
||||
g_assert(qemu_coroutine_entered(qemu_coroutine_self()));
|
||||
qemu_coroutine_yield();
|
||||
}
|
||||
|
||||
static void coroutine_fn verify_entered_step_1(void *opaque)
|
||||
{
|
||||
Coroutine *self = qemu_coroutine_self();
|
||||
Coroutine *coroutine;
|
||||
|
||||
g_assert(qemu_coroutine_entered(self));
|
||||
|
||||
coroutine = qemu_coroutine_create(verify_entered_step_2, self);
|
||||
g_assert(!qemu_coroutine_entered(coroutine));
|
||||
qemu_coroutine_enter(coroutine);
|
||||
g_assert(!qemu_coroutine_entered(coroutine));
|
||||
qemu_coroutine_enter(coroutine);
|
||||
}
|
||||
|
||||
static void test_entered(void)
|
||||
{
|
||||
Coroutine *coroutine;
|
||||
|
||||
coroutine = qemu_coroutine_create(verify_entered_step_1, NULL);
|
||||
g_assert(!qemu_coroutine_entered(coroutine));
|
||||
qemu_coroutine_enter(coroutine);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check that coroutines may nest multiple levels
|
||||
*/
|
||||
|
@ -389,6 +430,7 @@ int main(int argc, char **argv)
|
|||
g_test_add_func("/basic/yield", test_yield);
|
||||
g_test_add_func("/basic/nesting", test_nesting);
|
||||
g_test_add_func("/basic/self", test_self);
|
||||
g_test_add_func("/basic/entered", test_entered);
|
||||
g_test_add_func("/basic/in_coroutine", test_in_coroutine);
|
||||
g_test_add_func("/basic/order", test_order);
|
||||
if (g_test_perf()) {
|
||||
|
|
Loading…
Reference in a new issue