From: Rhett Garber Date: Sat, 8 Dec 2012 00:13:57 +0000 (-0800) Subject: Don't catch and hide exceptions caused by callbacks in http client X-Git-Tag: v3.0.0~196^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=11f90d071801c9459671c218c318400b4de4fa13;p=thirdparty%2Ftornado.git Don't catch and hide exceptions caused by callbacks in http client --- diff --git a/tornado/simple_httpclient.py b/tornado/simple_httpclient.py index faff83c8f..a5be937c1 100644 --- a/tornado/simple_httpclient.py +++ b/tornado/simple_httpclient.py @@ -316,12 +316,20 @@ class _HTTPConnection(object): try: yield except Exception, e: - gen_log.warning("uncaught exception", exc_info=True) - self._run_callback(HTTPResponse(self.request, 599, error=e, - request_time=self.io_loop.time() - self.start_time, - )) - if hasattr(self, "stream"): - self.stream.close() + if self.final_callback: + gen_log.warning("uncaught exception", exc_info=True) + self._run_callback(HTTPResponse(self.request, 599, error=e, + request_time=self.io_loop.time() - self.start_time, + )) + + if hasattr(self, "stream"): + self.stream.close() + else: + # If our callback has already been called, we are probably + # catching an exception that is not caused by us but rather + # some child of our callback. Rather than drop it on the floor, + # pass it along. + raise def _on_close(self): if self.final_callback is not None: