diff --git a/tornado/simple_httpclient.py b/tornado/simple_httpclient.py index 32ba5c84..f5f075fa 100644 --- a/tornado/simple_httpclient.py +++ b/tornado/simple_httpclient.py @@ -220,7 +220,7 @@ class _HTTPConnection(object): if timeout: self._timeout = self.io_loop.add_timeout( self.start_time + timeout, - self._on_timeout) + stack_context.wrap(self._on_timeout)) self.stream.set_close_callback(self._on_close) self.stream.connect(sockaddr, functools.partial(self._on_connect, parsed, @@ -228,10 +228,8 @@ class _HTTPConnection(object): def _on_timeout(self): self._timeout = None - self._run_callback(HTTPResponse(self.request, 599, - request_time=time.time() - self.start_time, - error=HTTPError(599, "Timeout"))) - self.stream.close() + if self.final_callback is not None: + raise HTTPError(599, "Timeout") def _on_connect(self, parsed, parsed_hostname): if self._timeout is not None: @@ -240,7 +238,7 @@ class _HTTPConnection(object): if self.request.request_timeout: self._timeout = self.io_loop.add_timeout( self.start_time + self.request.request_timeout, - self._on_timeout) + stack_context.wrap(self._on_timeout)) if (self.request.validate_cert and isinstance(self.stream, SSLIOStream)): match_hostname(self.stream.socket.getpeercert(), @@ -329,10 +327,8 @@ class _HTTPConnection(object): self.stream.close() def _on_close(self): - self._run_callback(HTTPResponse( - self.request, 599, - request_time=time.time() - self.start_time, - error=HTTPError(599, "Connection closed"))) + if self.final_callback is not None: + raise HTTPError(599, "Connection closed") def _on_headers(self, data): data = native_str(data.decode("latin1"))