[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [stem/master] Replacing send/recv conditionals with RLock
commit a3cddb03bd4ccd1dc3824bf2ec76695bde3b9322
Author: Damian Johnson <atagar@xxxxxxxxxxxxxx>
Date: Tue Feb 7 09:47:10 2012 -0800
Replacing send/recv conditionals with RLock
I'm not sure if threading.Conditional is re-entreant, but RLock definitely is
(that's what it's there for). Quite possable we had a concurrency issue due
to this, though if so I've never ran into it.
---
stem/socket.py | 28 ++++++++++++++--------------
1 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/stem/socket.py b/stem/socket.py
index 5b931a3..616fd6a 100644
--- a/stem/socket.py
+++ b/stem/socket.py
@@ -92,8 +92,8 @@ class ControlSocket:
# so prevents deadlock where we block writes because we're waiting to read
# a message that isn't coming.
- self._send_cond = threading.Condition()
- self._recv_cond = threading.Condition()
+ self._send_lock = threading.RLock()
+ self._recv_lock = threading.RLock()
def send(self, message, raw = False):
"""
@@ -110,7 +110,7 @@ class ControlSocket:
stem.socket.SocketClosed if the socket is known to be shut down
"""
- self._send_cond.acquire()
+ self._send_lock.acquire()
try:
if not self.is_alive(): raise SocketClosed()
@@ -121,7 +121,7 @@ class ControlSocket:
if self.is_alive(): self.close()
raise exc
finally:
- self._send_cond.release()
+ self._send_lock.release()
def recv(self):
"""
@@ -137,7 +137,7 @@ class ControlSocket:
complete message
"""
- self._recv_cond.acquire()
+ self._recv_lock.acquire()
try:
if not self.is_alive(): raise SocketClosed()
@@ -148,7 +148,7 @@ class ControlSocket:
if self.is_alive(): self.close()
raise exc
finally:
- self._recv_cond.release()
+ self._recv_lock.release()
def is_alive(self):
"""
@@ -179,8 +179,8 @@ class ControlSocket:
"""
# we need both locks for this
- self._send_cond.acquire()
- self._recv_cond.acquire()
+ self._send_lock.acquire()
+ self._recv_lock.acquire()
# close the socket if we're currently attached to one
if self.is_alive(): self.close()
@@ -190,8 +190,8 @@ class ControlSocket:
self._socket_file = self._socket.makefile()
self._is_alive = True
finally:
- self._send_cond.release()
- self._recv_cond.release()
+ self._send_lock.release()
+ self._recv_lock.release()
def close(self):
"""
@@ -199,8 +199,8 @@ class ControlSocket:
"""
# we need both locks for this
- self._send_cond.acquire()
- self._recv_cond.acquire()
+ self._send_lock.acquire()
+ self._recv_lock.acquire()
if self._socket:
# if we haven't yet established a connection then this raises an error
@@ -224,8 +224,8 @@ class ControlSocket:
self._socket_file = None
self._is_alive = False
- self._send_cond.release()
- self._recv_cond.release()
+ self._send_lock.release()
+ self._recv_lock.release()
def __enter__(self):
return self
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits