[tor-commits] [arm/release] fix: concurrency issue could crash from CIRC event

atagar at torproject.org atagar at torproject.org
Sun Sep 25 21:38:31 UTC 2011


commit e884fcbd894c9e764c60e6b40c5bd3e14583352e
Author: Damian Johnson <atagar at torproject.org>
Date:   Sat Sep 24 13:03:20 2011 -0700

    fix: concurrency issue could crash from CIRC event
    
    If we got a CIRC event while populating the cache of relays that we're attached
    to we could reset _fingerprintsAttachedCache to None while we were in the
    middle of populating it. Manipulation of this cache is supposed to be governed
    by the connection lock, so fixing that for the CIRC event's reset.
---
 src/util/torTools.py |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/src/util/torTools.py b/src/util/torTools.py
index e59b35e..3d18fcb 100644
--- a/src/util/torTools.py
+++ b/src/util/torTools.py
@@ -2004,7 +2004,9 @@ class Controller(TorCtl.PostEventListener):
     
     # CIRC events aren't required, but if one's received then flush this cache
     # since it uses circuit-status results.
+    self.connLock.acquire()
     self._fingerprintsAttachedCache = None
+    self.connLock.release()
     
     self._cachedParam["circuits"] = None
   
@@ -2085,6 +2087,10 @@ class Controller(TorCtl.PostEventListener):
       relayPort    - orport of relay (to further narrow the results)
     """
     
+    # Events can reset _fingerprintsAttachedCache to None, so all uses of this
+    # function need to be under the connection lock (skipping that might also
+    # scew with the conn usage of this function...)
+    
     # If we were provided with a string port then convert to an int (so
     # lookups won't mismatch based on type).
     if isinstance(relayPort, str): relayPort = int(relayPort)





More information about the tor-commits mailing list