Fix a potential deadlock in BGPSession 39/14339/1
authorRobert Varga <rovarga@cisco.com>
Wed, 21 Jan 2015 15:17:49 +0000 (16:17 +0100)
committerRobert Varga <rovarga@cisco.com>
Wed, 21 Jan 2015 15:21:15 +0000 (16:21 +0100)
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 5d91d3ed2791ec56d4d189fcb04bec638611e10d..4c282f8fb5fc216515c27ed93be2cdc703d06b64 100644 (file)
@@ -355,7 +355,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);
     }