On Mon, Jul 09, 2018 at 22:56:52 -0500, Chris Venteicher wrote:
Previously QMPCommandPtr (handle for issuing QMP commands) required
an
external char * qmperr to persist over the lifespan of QMPCommand to
expose a QMP error string outside of QMPCommand.
Before this change, an external char *qmperr had to be maintained
between calls to virQEMUCapsInitQMPCommandNew and
virQEMUCapsInitQMPCommandAbort.
This change allows the qmperr pointer to be maintained within the
QMPCommand structure avoiding the need to track and maintain the qmperr
across a sometimes multi-function call lifespan of a QMPCommand.
Q) Should we eliminate external *qmperr completely as there seems to be
no current use of qmperr outside the lifespan of QMPCommand in which an
internal qmperr char pointer can persist and be used by anywhere we have
access to the QMPCommandPtr?
---
src/qemu/qemu_capabilities.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index d3f2317a1d..f33152ec40 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -4272,6 +4272,7 @@ struct _virQEMUCapsInitQMPCommand {
uid_t runUid;
gid_t runGid;
char **qmperr;
+ char *qmperr_internal;
I'd probably call it qmperrBuffer or something similar to make it more
obvious it's the buffer for qmperr.
char *monarg;
char *monpath;
char *pidfile;
@@ -4349,7 +4350,11 @@ virQEMUCapsInitQMPCommandNew(char *binary,
cmd->runUid = runUid;
cmd->runGid = runGid;
- cmd->qmperr = qmperr;
+
+ if (qmperr)
+ cmd->qmperr = qmperr; /* external storage */
+ else
+ cmd->qmperr = &cmd->qmperr_internal; /* cmd internal storage */
/* the ".sock" sufix is important to avoid a possible clash with a qemu
* domain called "capabilities"
You don't free the internal buffer anywhere.
Jirka