From eaa526583db2281b867940f5b200ad379e68f28f Mon Sep 17 00:00:00 2001
From: zzz <zzz@i2pmail.org>
Date: Tue, 12 Apr 2022 09:00:40 -0400
Subject: [PATCH] Transport: Fix UPnP deadlock

---
 .../src/net/i2p/router/transport/TransportManager.java    | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/router/java/src/net/i2p/router/transport/TransportManager.java b/router/java/src/net/i2p/router/transport/TransportManager.java
index 3029a1ce8c..44c6a8970b 100644
--- a/router/java/src/net/i2p/router/transport/TransportManager.java
+++ b/router/java/src/net/i2p/router/transport/TransportManager.java
@@ -977,7 +977,10 @@ public class TransportManager implements TransportEventListener {
                         _upnpUpdateQueued = true;
                         _context.simpleTimer2().addEvent(new UpdatePorts(), 3250);
                     } else {
-                        _upnpManager.update(getPorts());
+                        // throw onto timer to avoid deadlock
+                        //_upnpManager.update(getPorts());
+                        _upnpUpdateQueued = true;
+                        _context.simpleTimer2().addEvent(new UpdatePorts(), 0);
                     }
                 }
             }
@@ -991,9 +994,10 @@ public class TransportManager implements TransportEventListener {
      */
     private class UpdatePorts implements SimpleTimer.TimedEvent {
         public void timeReached() {
+            Set<Port> ports = getPorts();
             synchronized (_upnpManager) {
                 _upnpUpdateQueued = false;
-                _upnpManager.update(getPorts());
+                _upnpManager.update(ports);
             }
         }
     }
-- 
GitLab