From 0e4d9f0378fa5272842967b5cf47dab86f6f70f8 Mon Sep 17 00:00:00 2001 From: benoitc Date: Sat, 8 Mar 2014 18:00:50 -0800 Subject: [PATCH] make sure we return the correct error with the last traceback. fix #630 --- gunicorn/workers/async.py | 9 +++++++-- gunicorn/workers/sync.py | 5 ++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/gunicorn/workers/async.py b/gunicorn/workers/async.py index ca59d2a4..29b79578 100644 --- a/gunicorn/workers/async.py +++ b/gunicorn/workers/async.py @@ -7,6 +7,7 @@ from datetime import datetime import errno import socket import ssl +import sys import gunicorn.http as http import gunicorn.http.wsgi as wsgi @@ -48,9 +49,13 @@ class AsyncWorker(base.Worker): except StopIteration as e: self.log.debug("Closing connection. %s", e) except ssl.SSLError: - raise # pass to next try-except level + exc_info = sys.exc_info() + # pass to next try-except level + six.reraise(exc_info[0], exc_info[1], exc_info[2]) except socket.error: - raise # pass to next try-except level + exc_info = sys.exc_info() + # pass to next try-except level + six.reraise(exc_info[0], exc_info[1], exc_info[2]) except Exception as e: self.handle_error(req, client, addr, e) except ssl.SSLError as e: diff --git a/gunicorn/workers/sync.py b/gunicorn/workers/sync.py index 9a3ba90b..12a50f87 100644 --- a/gunicorn/workers/sync.py +++ b/gunicorn/workers/sync.py @@ -10,6 +10,7 @@ import os import select import socket import ssl +import sys import gunicorn.http as http import gunicorn.http.wsgi as wsgi @@ -144,7 +145,9 @@ class SyncWorker(base.Worker): if hasattr(respiter, "close"): respiter.close() except socket.error: - raise + exc_info = sys.exc_info() + # pass to next try-except level + six.reraise(exc_info[0], exc_info[1], exc_info[2]) except Exception: if resp and resp.headers_sent: # If the requests have already been sent, we should close the