[libvirt] [libvirt PATCHv6 1/1] add DHCP snooping

Eric Blake eblake at redhat.com
Thu Mar 22 22:54:31 UTC 2012


On 03/22/2012 04:49 PM, David Stevens wrote:
> Stefan Berger/Watson/IBM wrote on 03/22/2012 03:04:53 PM:
> 
>>
>> I have some concerns about the cancelation of the thread. It can 
>> hold the snoop lock and get cancelled while holding it. Next time 
>> that lock is grabbed we will get a deadlock...
>>
> 
> The snoop lock is acquired in virNWFilterDHCPSnoopEnd(), which
> is where the pthread_cancel() directly (for valid leases) or the
> freeReq()/pthread_cancel() is done. So, the canceler has the lock
> and the canceling thread can't have it, then.
> 
> The only other case I see is when the config goes invalid and
> we exit the snooper loop; he frees the snoop_lock() before removing
> his own hash entry,  which will cancel the same thread doing
> the remove. Again, it can't have the snoop lock when canceled.
> 
> Is there some other case you think I'm missing?

pthread_cancel() tends to imply that you are properly managing signal
blocking across threads; we haven't used it anywhere else in libvirt,
and I'm extremely wary of pulling it in now, as there's probably a lot
of subtle bugs that it would expose.  Are you sure you can't do this in
some other manner without dragging in pthread_cancel()?

-- 
Eric Blake   eblake at redhat.com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120322/0aaf69d5/attachment-0001.sig>


More information about the libvir-list mailing list