On Thu, Apr 03, 2014 at 09:02:48PM -0700, Alex Wang wrote:
> Commit 6b59b543 (ovs-thread: Use fair (but nonrecursive)
> rwlocks on glibc.) changed the rwlocks to nonrecursive,
> writer-biased lock.  It also made the following deadlock
> situation possible.
> 
> Assume BFD is used on both end of a link.  Consider the
> following events:
> 1. Handler at one end received the BFD control packet with
>    POLL flag set while holding the read lock of 'xlate_rwlock'.
>    Since a BFD control packet with FINAL flag set should be
>    sent back immediately, it calls the
>    ofproto_dpif_monitor_port_send_soon(), in which, it tries
>    to grab the 'monitor_mutex'.
> 2. The main thread needs to configure the ofproto-dpif-xlate
>    module.  It tries to grab the write lock of 'xlate_rwlock'
>    and is blocked by event 1.
> 3. The monitor thread, after acquired the 'monitor_mutex',
>    wants to acquire the read lock of 'xlate_rwlock'.
> 
> Since the rwlock is now writer-biased, the attempt of acquiring
> read lock in event 3 will be blocked by event 2.  This will
> subsequently cause the block of event 1, since monitor thread
> is holding the 'monitor_mutex'.  So the deadlock happens.

Have you observed this deadlock or just found it in the source code.
Is there a good way to reproduce the deadlock?  I'd like to do some
experiments.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to