[PATCH stable] httppeer: make __del__ access to self.urlopener more safe
Mads Kiilerich
mads at kiilerich.com
Mon Oct 31 12:44:13 UTC 2016
# HG changeset patch
# User Mads Kiilerich <madski at unity3d.com>
# Date 1477917828 -3600
# Mon Oct 31 13:43:48 2016 +0100
# Branch stable
# Node ID 13b1ef724b8c5c22f9234f62b9d9a583655ce87e
# Parent 69ffbbe73dd03df0d1a00bdb2bc083fdb73ede09
httppeer: make __del__ access to self.urlopener more safe
Some errors could in some cases show unfortunate scary and confusing warnings
from the httppeer delstructors:
abort: nodename nor servname provided, or not known
Exception AttributeError: "'httpspeer' object has no attribute 'urlopener'" in <bound method httpspeer.__del__ of <mercurial.httppeer.httpspeer object at 0x106e1f5d0>> ignored```
To mute that, take 7b15dd9125b3 to the next level and use getattr in __del__.
diff --git a/mercurial/httppeer.py b/mercurial/httppeer.py
--- a/mercurial/httppeer.py
+++ b/mercurial/httppeer.py
@@ -63,8 +63,9 @@ class httppeer(wireproto.wirepeer):
self.requestbuilder = urlreq.request
def __del__(self):
- if self.urlopener:
- for h in self.urlopener.handlers:
+ urlopener = getattr(self, 'urlopener', None)
+ if urlopener:
+ for h in urlopener.handlers:
h.close()
getattr(h, "close_all", lambda : None)()
More information about the Mercurial-devel
mailing list