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>
This commit is contained in:
parent
b5806108d2
commit
43a5dc02fd
@ -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);
|
||||
|
||||
co = qemu_coroutine_create(throttle_group_restart_queue_entry, &rd);
|
||||
rd->tgm = tgm;
|
||||
rd->is_write = is_write;
|
||||
|
||||
co = qemu_coroutine_create(throttle_group_restart_queue_entry, rd);
|
||||
aio_co_enter(tgm->aio_context, co);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user