[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 09/20] qmp: Fix tracing of non-string command IDs
From: |
Markus Armbruster |
Subject: |
[PATCH 09/20] qmp: Fix tracing of non-string command IDs |
Date: |
Fri, 11 Dec 2020 18:11:41 +0100 |
Tracepoints monitor_qmp_cmd_in_band and
monitor_qmp_cmd_out_of_band (commit cf869d5317 "qmp: support
out-of-band (oob) execution") treat non-string "id" like absent "id".
Fix that.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
---
monitor/qmp.c | 30 ++++++++++++++++++------------
1 file changed, 18 insertions(+), 12 deletions(-)
diff --git a/monitor/qmp.c b/monitor/qmp.c
index 374bb4b81c..8f91af32be 100644
--- a/monitor/qmp.c
+++ b/monitor/qmp.c
@@ -31,7 +31,6 @@
#include "qapi/qmp/qdict.h"
#include "qapi/qmp/qjson.h"
#include "qapi/qmp/qlist.h"
-#include "qapi/qmp/qstring.h"
#include "trace.h"
struct QMPRequest {
@@ -276,9 +275,15 @@ void coroutine_fn monitor_qmp_dispatcher_co(void *data)
mon->qmp_requests->length == QMP_REQ_QUEUE_LEN_MAX - 1;
qemu_mutex_unlock(&mon->qmp_queue_lock);
if (req_obj->req) {
- QDict *qdict = qobject_to(QDict, req_obj->req);
- QObject *id = qdict ? qdict_get(qdict, "id") : NULL;
- trace_monitor_qmp_cmd_in_band(qobject_get_try_str(id) ?: "");
+ if (trace_event_get_state(TRACE_MONITOR_QMP_CMD_IN_BAND)) {
+ QDict *qdict = qobject_to(QDict, req_obj->req);
+ QObject *id = qdict ? qdict_get(qdict, "id") : NULL;
+ GString *id_json;
+
+ id_json = id ? qobject_to_json(id) : g_string_new(NULL);
+ trace_monitor_qmp_cmd_in_band(id_json->str);
+ g_string_free(id_json, true);
+ }
monitor_qmp_dispatch(mon, req_obj->req);
} else {
assert(req_obj->err);
@@ -308,17 +313,11 @@ void coroutine_fn monitor_qmp_dispatcher_co(void *data)
static void handle_qmp_command(void *opaque, QObject *req, Error *err)
{
MonitorQMP *mon = opaque;
- QObject *id = NULL;
- QDict *qdict;
+ QDict *qdict = qobject_to(QDict, req);
QMPRequest *req_obj;
assert(!req != !err);
- qdict = qobject_to(QDict, req);
- if (qdict) {
- id = qdict_get(qdict, "id");
- } /* else will fail qmp_dispatch() */
-
if (req && trace_event_get_state_backends(TRACE_HANDLE_QMP_COMMAND)) {
GString *req_json = qobject_to_json(req);
trace_handle_qmp_command(mon, req_json->str);
@@ -327,7 +326,14 @@ static void handle_qmp_command(void *opaque, QObject *req,
Error *err)
if (qdict && qmp_is_oob(qdict)) {
/* OOB commands are executed immediately */
- trace_monitor_qmp_cmd_out_of_band(qobject_get_try_str(id) ?: "");
+ if (trace_event_get_state(TRACE_MONITOR_QMP_CMD_OUT_OF_BAND)) {
+ QObject *id = qdict_get(qdict, "id");
+ GString *id_json;
+
+ id_json = id ? qobject_to_json(id) : g_string_new(NULL);
+ trace_monitor_qmp_cmd_out_of_band(id_json->str);
+ g_string_free(id_json, true);
+ }
monitor_qmp_dispatch(mon, req);
qobject_unref(req);
return;
--
2.26.2
- [PATCH 02/20] monitor: Use GString instead of QString for output buffer, (continued)
- [PATCH 02/20] monitor: Use GString instead of QString for output buffer, Markus Armbruster, 2020/12/11
- [PATCH 04/20] qobject: Use GString instead of QString to accumulate JSON, Markus Armbruster, 2020/12/11
- [PATCH 14/20] qobject: Factor quoted_str() out of to_json(), Markus Armbruster, 2020/12/11
- [PATCH 08/20] qobject: Move internals to qobject-internal.h, Markus Armbruster, 2020/12/11
- [PATCH 05/20] qobject: Change qobject_to_json()'s value to GString, Markus Armbruster, 2020/12/11
- [PATCH 06/20] Revert "qstring: add qstring_free()", Markus Armbruster, 2020/12/11
- [PATCH 12/20] qobject: Drop qobject_get_try_str(), Markus Armbruster, 2020/12/11
- [PATCH 19/20] block: Use GString instead of QString to build filenames, Markus Armbruster, 2020/12/11
- [PATCH 09/20] qmp: Fix tracing of non-string command IDs,
Markus Armbruster <=
- [PATCH 03/20] qobject: Make qobject_to_json_pretty() take a pretty argument, Markus Armbruster, 2020/12/11
- [PATCH 07/20] hw/rdma: Replace QList by GQueue, Markus Armbruster, 2020/12/11
- [PATCH 10/20] block: Avoid qobject_get_try_str(), Markus Armbruster, 2020/12/11
- [PATCH 15/20] qobject: Factor JSON writer out of qobject_to_json(), Markus Armbruster, 2020/12/11
- [PATCH 20/20] qobject: Make QString immutable, Markus Armbruster, 2020/12/11
- [PATCH 18/20] keyval: Use GString to accumulate value strings, Markus Armbruster, 2020/12/11
- [PATCH 01/20] hmp: Simplify how qmp_human_monitor_command() gets output, Markus Armbruster, 2020/12/11