diff options
| author | Kevin Wolf <kwolf@redhat.com> | 2020-10-05 17:58:44 +0200 |
|---|---|---|
| committer | Markus Armbruster <armbru@redhat.com> | 2020-10-09 07:08:19 +0200 |
| commit | 947e47448dcc4e4d7a8b7c42b43acb3435b3ad35 (patch) | |
| tree | 855a18a7da785ee7dff7919ec9a02be34c6ff51c /monitor/monitor.c | |
| parent | 87e6f4a4d6885006931b371771e2933c40700427 (diff) | |
| download | focaccia-qemu-947e47448dcc4e4d7a8b7c42b43acb3435b3ad35.tar.gz focaccia-qemu-947e47448dcc4e4d7a8b7c42b43acb3435b3ad35.zip | |
monitor: Use getter/setter functions for cur_mon
cur_mon really needs to be coroutine-local as soon as we move monitor command handlers to coroutines and let them yield. As a first step, just remove all direct accesses to cur_mon so that we can implement this in the getter function later. Signed-off-by: Kevin Wolf <kwolf@redhat.com> Message-Id: <20201005155855.256490-4-kwolf@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
Diffstat (limited to 'monitor/monitor.c')
| -rw-r--r-- | monitor/monitor.c | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/monitor/monitor.c b/monitor/monitor.c index 0f32892ad4..099c164c6d 100644 --- a/monitor/monitor.c +++ b/monitor/monitor.c @@ -66,13 +66,31 @@ MonitorList mon_list; int mon_refcount; static bool monitor_destroyed; -__thread Monitor *cur_mon; +static __thread Monitor *cur_monitor; + +Monitor *monitor_cur(void) +{ + return cur_monitor; +} + +/** + * Sets a new current monitor and returns the old one. + */ +Monitor *monitor_set_cur(Monitor *mon) +{ + Monitor *old_monitor = cur_monitor; + + cur_monitor = mon; + return old_monitor; +} /** * Is the current monitor, if any, a QMP monitor? */ bool monitor_cur_is_qmp(void) { + Monitor *cur_mon = monitor_cur(); + return cur_mon && monitor_is_qmp(cur_mon); } @@ -209,6 +227,8 @@ int monitor_printf(Monitor *mon, const char *fmt, ...) */ int error_vprintf(const char *fmt, va_list ap) { + Monitor *cur_mon = monitor_cur(); + if (cur_mon && !monitor_cur_is_qmp()) { return monitor_vprintf(cur_mon, fmt, ap); } @@ -217,6 +237,8 @@ int error_vprintf(const char *fmt, va_list ap) int error_vprintf_unless_qmp(const char *fmt, va_list ap) { + Monitor *cur_mon = monitor_cur(); + if (!cur_mon) { return vfprintf(stderr, fmt, ap); } |