[libvirt] [PATCH v1 29/31] bridge_driver: Drop networkDriverLock() from almost everywhere
Michal Privoznik
mprivozn at redhat.com
Wed Mar 4 09:24:52 UTC 2015
On 03.03.2015 16:26, Peter Krempa wrote:
> On Thu, Feb 26, 2015 at 15:17:38 +0100, Michal Privoznik wrote:
>> Now that we have fine grained locks, there's no need to lock the
>> whole driver. We can rely on self-locking APIs.
>>
>> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
>> ---
>> src/network/bridge_driver.c | 45 +++------------------------------------------
>> 1 file changed, 3 insertions(+), 42 deletions(-)
>
>
> This patch allows the following race:
>
> Threads 1 and 2 want to define a network with same name. Both threads
> call into:
>
> virNetworkObjPtr
> virNetworkAssignDef(virNetworkObjListPtr nets,
> virNetworkDefPtr def,
> bool live)
> {
> virNetworkObjPtr network;
>
> // both threads are here now
> if ((network = virNetworkObjFindByName(nets, def->name))) {
> // they both serialize on the virNetworkObjFindByName, but neither of
> // those finds the object before the other one manages to add it
> virNetworkObjAssignDef(network, def, live);
> return network;
> }
>
> if (!(network = virNetworkObjNew()))
> // now both threads allocate the object ...
>
> return NULL;
> virObjectLock(network);
>
> virObjectLock(nets);
> // and serialize here again, but both threads think now that they
> // shall add the network to the list ...
> if (VIR_APPEND_ELEMENT_COPY(nets->objs, nets->count, network) < 0)
>
> .. and do so.
> goto error;
>
> virNetworkAssignDef() will need more love. I think that
> virNetworkObjFindByName and friends should not lock or ref the network
> object and the callers such as virNetworkAssignDef() or
> networkObjFromNetwork() should do it.
>
> In that way, you'll be able to lock the list before and TEST_AND_SET the
> object in an atomic fashion.
>
> Rest of this patch looks okay.
D'oh! You're right. This has slipped my mind. So, I'm pushing first 12
patches (yep, some of them were not explicitly ACKed, but 01/31 is
trivial enough to be fixed without v2 :-P), and will respin the rest.
Thanks for the review!
Michal
More information about the libvir-list
mailing list