Fix a potential deadlock in BGPSession 40/14340/1
authorRobert Varga <rovarga@cisco.com>
Wed, 21 Jan 2015 15:17:49 +0000 (16:17 +0100)
committerRobert Varga <nite@hq.sk>
Wed, 21 Jan 2015 15:22:08 +0000 (15:22 +0000)
In a two-session scenario, it is possible to arrive at a ABBA deadlock,
where we acquire locks:

Thread 1      Thread 2
--------      --------
Session A     Session B

RIB
              RIB <-- blocks waiting for Thread 1

Session B <-- blocks waiting for Thread 2

The lock is being held only for scheduling a task on Thread 2, which a
thread-safe operation, so we can simply remove the need to take the lock
in Thread 1.

Change-Id: I4e55d3228a48790b2f19eef12ce1b54fd57955a0
Signed-off-by: Robert Varga <rovarga@cisco.com>
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/BGPSessionImpl.java

index 005dc368d5a2ca00bff36a8cb21892eb6bec2b78..f5191d7df576b41f1fb2ebf320c3fc959f13647d 100644 (file)
@@ -324,7 +324,7 @@ public class BGPSessionImpl extends AbstractProtocolSession<Notification> implem
         return this.channel != null && this.channel.isWritable();
     }
 
-    synchronized void schedule(final Runnable task) {
+    void schedule(final Runnable task) {
         Preconditions.checkState(this.channel != null);
         this.channel.eventLoop().submit(task);