diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 08d9c16ece..21a49bd5ac 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -2030,7 +2030,7 @@ virDomainActualNetDefFree(virDomainActualNetDefPtr def) virDomainVsockDefPtr -virDomainVsockDefNew(virDomainXMLOptionPtr xmlopt ATTRIBUTE_UNUSED) +virDomainVsockDefNew(virDomainXMLOptionPtr xmlopt) { virDomainVsockDefPtr ret = NULL; virDomainVsockDefPtr vsock; @@ -2038,7 +2038,14 @@ virDomainVsockDefNew(virDomainXMLOptionPtr xmlopt ATTRIBUTE_UNUSED) if (VIR_ALLOC(vsock) < 0) return NULL; + if (xmlopt && + xmlopt->privateData.vsockNew && + !(vsock->privateData = xmlopt->privateData.vsockNew())) + goto cleanup; + VIR_STEAL_PTR(ret, vsock); + cleanup: + virDomainVsockDefFree(vsock); return ret; } @@ -2046,6 +2053,10 @@ virDomainVsockDefNew(virDomainXMLOptionPtr xmlopt ATTRIBUTE_UNUSED) void virDomainVsockDefFree(virDomainVsockDefPtr vsock) { + if (!vsock) + return; + + virObjectUnref(vsock->privateData); VIR_FREE(vsock); } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 187cae9428..7877bcc9b1 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2315,6 +2315,7 @@ struct _virDomainIOMMUDef { }; struct _virDomainVsockDef { + virObjectPtr privateData; }; struct _virDomainVirtioOptions { @@ -2687,6 +2688,7 @@ struct _virDomainXMLPrivateDataCallbacks { virDomainXMLPrivateDataNewFunc diskNew; virDomainXMLPrivateDataNewFunc vcpuNew; virDomainXMLPrivateDataNewFunc chrSourceNew; + virDomainXMLPrivateDataNewFunc vsockNew; virDomainXMLPrivateDataFormatFunc format; virDomainXMLPrivateDataParseFunc parse; /* following function shall return a pointer which will be used as the