From 63b67de2e7298cf8c831f652724711dc8a1f8109 Mon Sep 17 00:00:00 2001 From: Jeremy Hylton <jeremy@svn.zope.org> Date: Thu, 1 Aug 2002 18:46:50 +0000 Subject: [PATCH] Make doubly sure that SystemExit isn't caught be generic error handling. --- trunk/src/ZEO/zrpc/connection.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/trunk/src/ZEO/zrpc/connection.py b/trunk/src/ZEO/zrpc/connection.py index 75532ea5..fcc76541 100644 --- a/trunk/src/ZEO/zrpc/connection.py +++ b/trunk/src/ZEO/zrpc/connection.py @@ -167,11 +167,14 @@ class Connection(smac.SizedMessageAsyncConnection): meth = getattr(self.obj, name) try: ret = meth(*args) + except (SystemExit, KeyboardInterrupt): + raise except Exception, msg: - error = sys.exc_info()[:2] - log("%s() raised exception: %s" % (name, msg), - zLOG.ERROR, error=sys.exc_info()) - return self.return_error(msgid, flags, error[0], error[1]) + error = sys.exc_info() + log("%s() raised exception: %s" % (name, msg), zLOG.ERROR, + error=error) + error = error[:2] + return self.return_error(msgid, flags, *error) if flags & ASYNC: if ret is not None: @@ -186,7 +189,9 @@ class Connection(smac.SizedMessageAsyncConnection): self.send_reply(msgid, ret) def handle_error(self): - self.log_error() + if sys.exc_info()[0] == SystemExit: + raise sys.exc_info() + self.log_error("Error caught in asyncore") self.close() def log_error(self, msg="No error message supplied"): -- 2.30.9