diff options
| author | Manos Pitsidianakis | 2017-09-18 22:25:29 +0200 |
|---|---|---|
| committer | Kevin Wolf | 2017-09-26 14:46:23 +0200 |
| commit | 43a5dc02fd6070827d5c4ff652b885219fa8cbe1 (patch) | |
| tree | 66190d6219f6dc2ff961c0c390bbf8c16d54df04 | |
| parent | throttle: Assert that bkt->max is valid in throttle_compute_wait() (diff) | |
| download | qemu-43a5dc02fd6070827d5c4ff652b885219fa8cbe1.tar.gz qemu-43a5dc02fd6070827d5c4ff652b885219fa8cbe1.tar.xz qemu-43a5dc02fd6070827d5c4ff652b885219fa8cbe1.zip | |
block/throttle-groups.c: allocate RestartData on the heap
RestartData is the opaque data of the throttle_group_restart_queue_entry
coroutine. By being stack allocated, it isn't available anymore if
aio_co_enter schedules the coroutine with a bottom half and runs after
throttle_group_restart_queue returns.
Cc: qemu-stable@nongnu.org
Signed-off-by: Manos Pitsidianakis <el13635@mail.ntua.gr>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Alberto Garcia <berto@igalia.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
| -rw-r--r-- | block/throttle-groups.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/block/throttle-groups.c b/block/throttle-groups.c index 6ba992c8d7..b291a88481 100644 --- a/block/throttle-groups.c +++ b/block/throttle-groups.c @@ -403,17 +403,19 @@ static void coroutine_fn throttle_group_restart_queue_entry(void *opaque) schedule_next_request(tgm, is_write); qemu_mutex_unlock(&tg->lock); } + + g_free(data); } static void throttle_group_restart_queue(ThrottleGroupMember *tgm, bool is_write) { Coroutine *co; - RestartData rd = { - .tgm = tgm, - .is_write = is_write - }; + RestartData *rd = g_new0(RestartData, 1); + + rd->tgm = tgm; + rd->is_write = is_write; - co = qemu_coroutine_create(throttle_group_restart_queue_entry, &rd); + co = qemu_coroutine_create(throttle_group_restart_queue_entry, rd); aio_co_enter(tgm->aio_context, co); } |
