diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2023-03-03 13:51:58 +0100 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2023-05-25 10:18:33 +0200 |
commit | 60f4f62efeb174fe7433ce9ebc37836e70ec9b75 (patch) | |
tree | 27c6ee24fa27f66bed2cea4e214dd19e920fe76f /monitor | |
parent | 9f2d58546e8cc83b1b033c4f89dcb188e7b05c0c (diff) |
monitor: extract request dequeuing to a new function
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'monitor')
-rw-r--r-- | monitor/qmp.c | 37 |
1 files changed, 22 insertions, 15 deletions
diff --git a/monitor/qmp.c b/monitor/qmp.c index 613b74ec74..e6b1043c9f 100644 --- a/monitor/qmp.c +++ b/monitor/qmp.c @@ -226,13 +226,8 @@ static QMPRequest *monitor_qmp_requests_pop_any_with_lock(void) return req_obj; } -void coroutine_fn monitor_qmp_dispatcher_co(void *data) +static QMPRequest *monitor_qmp_dispatcher_pop_any(void) { - QMPRequest *req_obj = NULL; - QDict *rsp; - bool oob_enabled; - MonitorQMP *mon; - while (true) { /* * busy must be set to true again by whoever @@ -248,24 +243,36 @@ void coroutine_fn monitor_qmp_dispatcher_co(void *data) qatomic_mb_set(&qmp_dispatcher_co_busy, false); WITH_QEMU_LOCK_GUARD(&monitor_lock) { + QMPRequest *req_obj; + /* On shutdown, don't take any more requests from the queue */ if (qmp_dispatcher_co_shutdown) { return NULL; } req_obj = monitor_qmp_requests_pop_any_with_lock(); + if (req_obj) { + return req_obj; + } } - if (!req_obj) { - /* - * No more requests to process. Wait to be reentered from - * handle_qmp_command() when it pushes more requests, or - * from monitor_cleanup() when it requests shutdown. - */ - qemu_coroutine_yield(); - continue; - } + /* + * No more requests to process. Wait to be reentered from + * handle_qmp_command() when it pushes more requests, or + * from monitor_cleanup() when it requests shutdown. + */ + qemu_coroutine_yield(); + } +} + +void coroutine_fn monitor_qmp_dispatcher_co(void *data) +{ + QMPRequest *req_obj; + QDict *rsp; + bool oob_enabled; + MonitorQMP *mon; + while ((req_obj = monitor_qmp_dispatcher_pop_any()) != NULL) { trace_monitor_qmp_in_band_dequeue(req_obj, req_obj->mon->qmp_requests->length); |