[tor-commits] [stem/master] Make proc connenction resolution more resilient

atagar at torproject.org atagar at torproject.org
Fri Jan 2 20:47:40 UTC 2015


commit 539b6353114e95fa805f55c36562502eec76534e
Author: Damian Johnson <atagar at torproject.org>
Date:   Fri Jan 2 12:27:02 2015 -0800

    Make proc connenction resolution more resilient
    
    On busy relays we can fail due to descriptors being dropped in the middle of
    reading them. This was caught by toralf on...
    
      https://trac.torproject.org/projects/tor/ticket/14048
---
 docs/change_log.rst |    1 +
 stem/util/proc.py   |    7 +++++--
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/docs/change_log.rst b/docs/change_log.rst
index cad1f32..3f8a4bc 100644
--- a/docs/change_log.rst
+++ b/docs/change_log.rst
@@ -44,6 +44,7 @@ The following are only available within Stem's `git repository
  * **Utilities**
 
   * :func:`stem.util.connection.port_usage` always returned None (:trac:`14046`)
+  * Proc connection resolution could fail on especially busy systems (:trac:`14048`)
 
 .. _version_1.3:
 
diff --git a/stem/util/proc.py b/stem/util/proc.py
index c7cb5ce..85585b4 100644
--- a/stem/util/proc.py
+++ b/stem/util/proc.py
@@ -365,9 +365,12 @@ def connections(pid):
 
       if fd_name.startswith('socket:['):
         inodes.append(fd_name[8:-1])
-    except OSError:
+    except OSError as exc:
+      if not os.path.exists(fd_path):
+        continue  # descriptors may shift while we're in the middle of iterating over them
+
       # most likely couldn't be read due to permissions
-      exc = IOError('unable to determine file descriptor destination: %s' % fd_path)
+      exc = IOError('unable to determine file descriptor destination (%s): %s' % (exc, fd_path))
       _log_failure(parameter, exc)
       raise exc
 



More information about the tor-commits mailing list