[v6,04/12] qmp: Assert that no other monitor is active
diff mbox series

Message ID 20200528153742.274164-5-kwolf@redhat.com
State New
Headers show
Series
  • monitor: Optionally run handlers in coroutines
Related show

Commit Message

Kevin Wolf May 28, 2020, 3:37 p.m. UTC
monitor_qmp_dispatch() is never supposed to be called in the context of
another monitor, so assert that monitor_cur() is NULL instead of saving
and restoring it.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 monitor/qmp.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

Comments

Eric Blake May 28, 2020, 6:38 p.m. UTC | #1
On 5/28/20 10:37 AM, Kevin Wolf wrote:
> monitor_qmp_dispatch() is never supposed to be called in the context of
> another monitor, so assert that monitor_cur() is NULL instead of saving
> and restoring it.
> 
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
>   monitor/qmp.c | 5 ++---
>   1 file changed, 2 insertions(+), 3 deletions(-)
> 

Reviewed-by: Eric Blake <eblake@redhat.com>
Markus Armbruster Aug. 4, 2020, 12:57 p.m. UTC | #2
Kevin Wolf <kwolf@redhat.com> writes:

> monitor_qmp_dispatch() is never supposed to be called in the context of
> another monitor, so assert that monitor_cur() is NULL instead of saving
> and restoring it.
>
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
>  monitor/qmp.c | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/monitor/qmp.c b/monitor/qmp.c
> index 5e9abd4711..a04c512e3a 100644
> --- a/monitor/qmp.c
> +++ b/monitor/qmp.c
> @@ -135,16 +135,15 @@ static void monitor_qmp_respond(MonitorQMP *mon, QDict *rsp)
>  
>  static void monitor_qmp_dispatch(MonitorQMP *mon, QObject *req)
>  {
> -    Monitor *old_mon;
>      QDict *rsp;
>      QDict *error;
>  
> -    old_mon = monitor_cur();
> +    assert(monitor_cur() == NULL);

I'd write !monitor_cur().  Matter of taste.

>      monitor_set_cur(&mon->common);
>  
>      rsp = qmp_dispatch(mon->commands, req, qmp_oob_enabled(mon));
>  
> -    monitor_set_cur(old_mon);
> +    monitor_set_cur(NULL);
>  
>      if (mon->commands == &qmp_cap_negotiation_commands) {
>          error = qdict_get_qdict(rsp, "error");

Reviewed-by: Markus Armbruster <armbru@redhat.com>

Patch
diff mbox series

diff --git a/monitor/qmp.c b/monitor/qmp.c
index 5e9abd4711..a04c512e3a 100644
--- a/monitor/qmp.c
+++ b/monitor/qmp.c
@@ -135,16 +135,15 @@  static void monitor_qmp_respond(MonitorQMP *mon, QDict *rsp)
 
 static void monitor_qmp_dispatch(MonitorQMP *mon, QObject *req)
 {
-    Monitor *old_mon;
     QDict *rsp;
     QDict *error;
 
-    old_mon = monitor_cur();
+    assert(monitor_cur() == NULL);
     monitor_set_cur(&mon->common);
 
     rsp = qmp_dispatch(mon->commands, req, qmp_oob_enabled(mon));
 
-    monitor_set_cur(old_mon);
+    monitor_set_cur(NULL);
 
     if (mon->commands == &qmp_cap_negotiation_commands) {
         error = qdict_get_qdict(rsp, "error");