diff --git a/THANKS b/THANKS index 800302f2..20554878 100644 --- a/THANKS +++ b/THANKS @@ -10,3 +10,4 @@ Johan Bergström Xavier Grangier Sergey Shepelev Chris Dent +Matt Good diff --git a/examples/bad.py b/examples/bad.py new file mode 100644 index 00000000..e39291ee --- /dev/null +++ b/examples/bad.py @@ -0,0 +1,6 @@ +import tempfile +files = [] +def app(environ, start_response): + files.append(tempfile.mkstemp()) + start_response('200 OK', [('Content-type', 'text/plain'), ('Content-length', '2')]) + return ['ok'] diff --git a/gunicorn/workers/async.py b/gunicorn/workers/async.py index 76a53cb7..999d9622 100644 --- a/gunicorn/workers/async.py +++ b/gunicorn/workers/async.py @@ -30,7 +30,7 @@ class AsyncWorker(Worker): pass except socket.error, e: if e[0] not in (errno.EPIPE, errno.ECONNRESET): - self.log.exception("Error processing request.") + self.log.exception("Socket error processing request.") else: if e[0] == errno.ECONNRESET: self.log.warn("Ignoring connection reset") @@ -39,7 +39,7 @@ class AsyncWorker(Worker): except UnexpectedEOF: self.log.exception("Client closed the connection unexpectedly.") except Exception, e: - self.log.exception("Error processing request.") + self.log.exception("General error processing request.") try: # Last ditch attempt to notify the client of an error. mesg = "HTTP/1.0 500 Internal Server Error\r\n\r\n" diff --git a/gunicorn/workers/geventlet.py b/gunicorn/workers/geventlet.py index 5f870af8..35e0340e 100644 --- a/gunicorn/workers/geventlet.py +++ b/gunicorn/workers/geventlet.py @@ -62,6 +62,9 @@ class EventletWorker(AsyncWorker): conn, addr, gt = None, None, None except eventlet.StopServe: return + except: + self.log.exception("Unexpected error in acceptor. Sepuku.") + os._exit(4) def cleanup(self, thread, conn): try: diff --git a/gunicorn/workers/ggevent.py b/gunicorn/workers/ggevent.py index 89ff95e1..91968e24 100644 --- a/gunicorn/workers/ggevent.py +++ b/gunicorn/workers/ggevent.py @@ -60,6 +60,9 @@ class GEventWorker(AsyncWorker): conn, addr, gt = None, None, None except greenlet.GreenletExit: return + except: + self.log.exception("Unexpected error in acceptor. Sepuku.") + os._exit(4) def cleanup(self, gt): try: