diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c index 0f7470dfa6d0b1f5f5876ab467f567549ba0e3c1..2f9ad2edc55dd788a6f14c2986d86407d420c55a 100644 --- a/src/conf/network_conf.c +++ b/src/conf/network_conf.c @@ -352,6 +352,20 @@ virNetworkObjSetDefTransient(virNetworkObjPtr network, bool live) return network->newDef ? 0 : -1; } +/* virNetworkObjUnsetDefTransient: + * + * This *undoes* what virNetworkObjSetDefTransient did. + */ +void +virNetworkObjUnsetDefTransient(virNetworkObjPtr network) +{ + if (network->def) { + virNetworkDefFree(network->def); + network->def = network->newDef; + network->newDef = NULL; + } +} + /* * virNetworkObjGetPersistentDef: * @network: network object pointer diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h index 55502fb2fcff773520884caeb3cda9c1c2178d11..4c0c8c1fbfc818b192ebdb16863009a61ef93fce 100644 --- a/src/conf/network_conf.h +++ b/src/conf/network_conf.h @@ -253,6 +253,7 @@ int virNetworkObjAssignDef(virNetworkObjPtr network, const virNetworkDefPtr def, bool live); int virNetworkObjSetDefTransient(virNetworkObjPtr network, bool live); +void virNetworkObjUnsetDefTransient(virNetworkObjPtr network); virNetworkDefPtr virNetworkObjGetPersistentDef(virNetworkObjPtr network); int virNetworkObjReplacePersistentDef(virNetworkObjPtr network, virNetworkDefPtr def); diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 160573cbd70257cf51f16a79b11d82875f7050b6..60f9c7fdfbd0da907619731da55a223b099ab7f7 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -872,6 +872,7 @@ virNetworkObjLock; virNetworkObjReplacePersistentDef; virNetworkObjSetDefTransient; virNetworkObjUnlock; +virNetworkObjUnsetDefTransient; virNetworkObjUpdate; virNetworkRemoveInactive; virNetworkSaveConfig; diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c index 5578373746c4c556d80e20d28c712b4e637be0b2..fa909a1b8440d0459e53db6c1a2e16075e4bcf58 100644 --- a/src/network/bridge_driver.c +++ b/src/network/bridge_driver.c @@ -2327,8 +2327,10 @@ networkStartNetwork(struct network_driver *driver, break; } - if (ret < 0) + if (ret < 0) { + virNetworkObjUnsetDefTransient(network); return ret; + } /* Persist the live configuration now that anything autogenerated * is setup. @@ -2388,13 +2390,7 @@ static int networkShutdownNetwork(struct network_driver *driver, } network->active = 0; - - if (network->newDef) { - virNetworkDefFree(network->def); - network->def = network->newDef; - network->newDef = NULL; - } - + virNetworkObjUnsetDefTransient(network); return ret; }