diff options
author | Peter Lieven <pl@kamp.de> | 2016-09-27 11:58:44 +0200 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2016-09-29 14:13:39 +0200 |
commit | 2f4aa2329945c741e10fd5b6631e99a4be25ea60 (patch) | |
tree | 8909da5def084ab78244c047e499458caa77cca3 | |
parent | ddba15919bd51b45d0d1425cc2de0c0c0bae3877 (diff) |
coroutine-sigaltstack: use helper for allocating stack memory
Signed-off-by: Peter Lieven <pl@kamp.de>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
-rw-r--r-- | util/coroutine-sigaltstack.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/util/coroutine-sigaltstack.c b/util/coroutine-sigaltstack.c index a5bcb7e19e..f6fc49a0e5 100644 --- a/util/coroutine-sigaltstack.c +++ b/util/coroutine-sigaltstack.c @@ -33,6 +33,7 @@ typedef struct { Coroutine base; void *stack; + size_t stack_size; sigjmp_buf env; } CoroutineSigAltStack; @@ -143,7 +144,6 @@ static void coroutine_trampoline(int signal) Coroutine *qemu_coroutine_new(void) { - const size_t stack_size = COROUTINE_STACK_SIZE; CoroutineSigAltStack *co; CoroutineThreadState *coTS; struct sigaction sa; @@ -164,7 +164,8 @@ Coroutine *qemu_coroutine_new(void) */ co = g_malloc0(sizeof(*co)); - co->stack = g_malloc(stack_size); + co->stack_size = COROUTINE_STACK_SIZE; + co->stack = qemu_alloc_stack(&co->stack_size); co->base.entry_arg = &old_env; /* stash away our jmp_buf */ coTS = coroutine_get_thread_state(); @@ -189,7 +190,7 @@ Coroutine *qemu_coroutine_new(void) * Set the new stack. */ ss.ss_sp = co->stack; - ss.ss_size = stack_size; + ss.ss_size = co->stack_size; ss.ss_flags = 0; if (sigaltstack(&ss, &oss) < 0) { abort(); @@ -253,7 +254,7 @@ void qemu_coroutine_delete(Coroutine *co_) { CoroutineSigAltStack *co = DO_UPCAST(CoroutineSigAltStack, base, co_); - g_free(co->stack); + qemu_free_stack(co->stack, co->stack_size); g_free(co); } |