diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index bc410f7ad2a3c361da82b9774e6458e9d4af1664..748ffd56a0d1037aa36a9ed0d311098ea91aa99a 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -2024,6 +2024,7 @@ void virDomainChrSourceDefFree(virDomainChrSourceDefPtr def) return; virDomainChrSourceDefClear(def); + virObjectUnref(def->privateData); VIR_FREE(def); } @@ -2125,8 +2126,6 @@ void virDomainChrDefFree(virDomainChrDefPtr def) VIR_FREE(def->seclabels); } - virObjectUnref(def->privateData); - VIR_FREE(def); } @@ -10318,13 +10317,17 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def, static virDomainChrSourceDefPtr -virDomainChrSourceDefNew(void) +virDomainChrSourceDefNew(virDomainXMLOptionPtr xmlopt) { virDomainChrSourceDefPtr def = NULL; if (VIR_ALLOC(def) < 0) return NULL; + if (xmlopt && xmlopt->privateData.chrSourceNew && + !(def->privateData = xmlopt->privateData.chrSourceNew())) + VIR_FREE(def); + return def; } @@ -10342,14 +10345,8 @@ virDomainChrDefNew(virDomainXMLOptionPtr xmlopt) def->target.port = -1; - if (!(def->source = virDomainChrSourceDefNew())) - VIR_FREE(def); - - if (xmlopt && xmlopt->privateData.chardevNew && - !(def->privateData = xmlopt->privateData.chardevNew())) { - virDomainChrSourceDefFree(def->source); + if (!(def->source = virDomainChrSourceDefNew(xmlopt))) VIR_FREE(def); - } return def; } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 5247d34a8d8fa511f3ab09bd0b0a25e8a5537b46..8738c80441adf8d01fa6dfae78f2458bfe3f4c93 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1078,6 +1078,7 @@ typedef enum { /* The host side information for a character device. */ struct _virDomainChrSourceDef { int type; /* virDomainChrType */ + virObjectPtr privateData; union { /* no for null, vc, stdio */ struct { @@ -1117,7 +1118,6 @@ struct _virDomainChrSourceDef { /* A complete character device, both host and domain views. */ struct _virDomainChrDef { int deviceType; /* enum virDomainChrDeviceType */ - virObjectPtr privateData; bool targetTypeAttr; int targetType; /* enum virDomainChrConsoleTargetType || @@ -2447,7 +2447,7 @@ struct _virDomainXMLPrivateDataCallbacks { virDomainXMLPrivateDataNewFunc diskNew; virDomainXMLPrivateDataNewFunc hostdevNew; virDomainXMLPrivateDataNewFunc vcpuNew; - virDomainXMLPrivateDataNewFunc chardevNew; + virDomainXMLPrivateDataNewFunc chrSourceNew; virDomainXMLPrivateDataFormatFunc format; virDomainXMLPrivateDataParseFunc parse; }; diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 88c50a37e9dc72ffc8bf9386f063779f309a3d61..f11bc010ca2f5cac43b12a130881d236cdad97c1 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -864,34 +864,34 @@ qemuDomainVcpuPrivateDispose(void *obj) } -static virClassPtr qemuDomainChardevPrivateClass; -static void qemuDomainChardevPrivateDispose(void *obj); +static virClassPtr qemuDomainChrSourcePrivateClass; +static void qemuDomainChrSourcePrivateDispose(void *obj); static int -qemuDomainChardevPrivateOnceInit(void) +qemuDomainChrSourcePrivateOnceInit(void) { - qemuDomainChardevPrivateClass = + qemuDomainChrSourcePrivateClass = virClassNew(virClassForObject(), - "qemuDomainChardevPrivate", - sizeof(qemuDomainChardevPrivate), - qemuDomainChardevPrivateDispose); - if (!qemuDomainChardevPrivateClass) + "qemuDomainChrSourcePrivate", + sizeof(qemuDomainChrSourcePrivate), + qemuDomainChrSourcePrivateDispose); + if (!qemuDomainChrSourcePrivateClass) return -1; else return 0; } -VIR_ONCE_GLOBAL_INIT(qemuDomainChardevPrivate) +VIR_ONCE_GLOBAL_INIT(qemuDomainChrSourcePrivate) static virObjectPtr -qemuDomainChardevPrivateNew(void) +qemuDomainChrSourcePrivateNew(void) { - qemuDomainChardevPrivatePtr priv; + qemuDomainChrSourcePrivatePtr priv; - if (qemuDomainChardevPrivateInitialize() < 0) + if (qemuDomainChrSourcePrivateInitialize() < 0) return NULL; - if (!(priv = virObjectNew(qemuDomainChardevPrivateClass))) + if (!(priv = virObjectNew(qemuDomainChrSourcePrivateClass))) return NULL; return (virObjectPtr) priv; @@ -899,9 +899,9 @@ qemuDomainChardevPrivateNew(void) static void -qemuDomainChardevPrivateDispose(void *obj) +qemuDomainChrSourcePrivateDispose(void *obj) { - qemuDomainChardevPrivatePtr priv = obj; + qemuDomainChrSourcePrivatePtr priv = obj; qemuDomainSecretInfoFree(&priv->secinfo); } @@ -1807,7 +1807,7 @@ virDomainXMLPrivateDataCallbacks virQEMUDriverPrivateDataCallbacks = { .diskNew = qemuDomainDiskPrivateNew, .vcpuNew = qemuDomainVcpuPrivateNew, .hostdevNew = qemuDomainHostdevPrivateNew, - .chardevNew = qemuDomainChardevPrivateNew, + .chrSourceNew = qemuDomainChrSourcePrivateNew, .parse = qemuDomainObjPrivateXMLParse, .format = qemuDomainObjPrivateXMLFormat, }; diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index 707a995dc56d9b02b6e2290807ad7de81f4c79a5..29125a2123564d00fb8e13d73d517321d8b453ba 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -352,12 +352,12 @@ struct _qemuDomainHostdevPrivate { qemuDomainSecretInfoPtr secinfo; }; -# define QEMU_DOMAIN_CHARDEV_PRIVATE(chardev) \ - ((qemuDomainChardevPrivatePtr) (chardev)->privateData) +# define QEMU_DOMAIN_CHR_SOURCE_PRIVATE(dev) \ + ((qemuDomainChrSourcePrivatePtr) (dev)->privateData) -typedef struct _qemuDomainChardevPrivate qemuDomainChardevPrivate; -typedef qemuDomainChardevPrivate *qemuDomainChardevPrivatePtr; -struct _qemuDomainChardevPrivate { +typedef struct _qemuDomainChrSourcePrivate qemuDomainChrSourcePrivate; +typedef qemuDomainChrSourcePrivate *qemuDomainChrSourcePrivatePtr; +struct _qemuDomainChrSourcePrivate { virObject parent; /* for char devices using secret