[libvirt] PATCH: 14/28: Thread safety for network driver
Daniel Veillard
veillard at redhat.com
Wed Dec 3 09:32:58 UTC 2008
On Sun, Nov 30, 2008 at 11:55:51PM +0000, Daniel P. Berrange wrote:
> This patch makes the network driver thread safe, following the pattern of
> the earlier patches
> @@ -95,6 +107,7 @@ networkAutostartConfigs(struct network_d
> unsigned int i;
Hum, you're not locking the driver itself during the loop ?
If a concurrent call were to remove one of the network object in
the meantime, that would lead to potentially random memory accesses
no ?
> for (i = 0 ; i < driver->networks.count ; i++) {
> + virNetworkObjLock(driver->networks.objs[i]);
> if (driver->networks.objs[i]->autostart &&
> !virNetworkIsActive(driver->networks.objs[i]) &&
> networkStartNetworkDaemon(NULL, driver, driver->networks.objs[i]) < 0) {
> @@ -103,6 +116,7 @@ networkAutostartConfigs(struct network_d
> driver->networks.objs[i]->def->name,
> err ? err->message : NULL);
> }
> + virNetworkObjUnlock(driver->networks.objs[i]);
> }
> }
>
[...]
> cleanup:
> + if (network)
> + virNetworkObjUnlock(network);
like for domain, I would suggest the unlocking accessor to accept NULL
and drop all the if constructs
If there is a good reason networkAutostartConfigs() doesn't need to
lock the top level driver lock, okay, otherwise +1 after fix,
Daniel
--
Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/
daniel at veillard.com | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library http://libvirt.org/
More information about the libvir-list
mailing list