From f7d7f594dcd5439bc05187361d55be720f07959e Mon Sep 17 00:00:00 2001 Message-Id: From: Jiri Moskovcak Date: Wed, 11 Apr 2012 15:31:34 +0200 Subject: [PATCH] pyhook: add timetout to sockets rhbz#808562 --- src/hooks/abrt_exception_handler.py.in | 46 ++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/src/hooks/abrt_exception_handler.py.in b/src/hooks/abrt_exception_handler.py.in index 9522a0f..cc00fc7 100644 --- a/src/hooks/abrt_exception_handler.py.in +++ b/src/hooks/abrt_exception_handler.py.in @@ -37,26 +37,32 @@ def write_dump(tb): try: import socket s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) - s.connect(@VAR_RUN@ + "/abrt/abrt.socket") - s.sendall("PUT / HTTP/1.1\r\n\r\n") - s.sendall("PID=%s\0" % os.getpid()) - s.sendall("EXECUTABLE=%s\0" % executable) - s.sendall("ANALYZER=Python\0") - s.sendall("BASENAME=pyhook\0") - # This handler puts a short(er) crash descr in 1st line of the backtrace. - # Example: - # CCMainWindow.py:1::ZeroDivisionError: integer division or modulo by zero - s.sendall("REASON=%s\0" % tb.splitlines()[0]) - s.sendall("BACKTRACE=%s\0" % tb) - s.shutdown(socket.SHUT_WR) - - # Read the response and log if there's anything wrong - response = "" - while True: - buf = s.recv(256) - if not buf: - break; - response += buf + s.settimeout(5) + try: + s.connect(@VAR_RUN@ + "/abrt/abrt.socket") + s.sendall("PUT / HTTP/1.1\r\n\r\n") + s.sendall("PID=%s\0" % os.getpid()) + s.sendall("EXECUTABLE=%s\0" % executable) + s.sendall("ANALYZER=Python\0") + s.sendall("BASENAME=pyhook\0") + # This handler puts a short(er) crash descr in 1st line of the backtrace. + # Example: + # CCMainWindow.py:1::ZeroDivisionError: integer division or modulo by zero + s.sendall("REASON=%s\0" % tb.splitlines()[0]) + s.sendall("BACKTRACE=%s\0" % tb) + s.shutdown(socket.SHUT_WR) + + + # Read the response and log if there's anything wrong + response = "" + while True: + buf = s.recv(256) + if not buf: + break + response += buf + except socket.timeout, ex: + import syslog + syslog.syslog("communication with ABRT daemon failed: %s" % str(ex)) s.close() parts = response.split() -- 1.7.10