Matej Habrnal 62f98d
From 9c58a7bbd6def445ba1d1faaf7a3c2960ba2819e Mon Sep 17 00:00:00 2001
Matej Habrnal 62f98d
From: Matej Habrnal <mhabrnal@redhat.com>
Matej Habrnal 62f98d
Date: Tue, 8 Mar 2016 16:45:36 +0100
Matej Habrnal 62f98d
Subject: [PATCH] a-a-install-debuginfo: fix BrokenPipe error
Matej Habrnal 62f98d
Matej Habrnal 62f98d
While debug info is downloading and stop button is pressed the BrokenPipe
Matej Habrnal 62f98d
error appears.
Matej Habrnal 62f98d
Matej Habrnal 62f98d
If the stop button is pressed, gui wizard sends SIGTERM to all
Matej Habrnal 62f98d
processes with the same group ID so abrt-action-install-debuginfo got SIGTERM
Matej Habrnal 62f98d
as well. It has its own SIGTERM handler which calls clean_up() function and it
Matej Habrnal 62f98d
takes a while before the tool is terminated.
Matej Habrnal 62f98d
abrt-action-install-debuginfo tries to write some messages to the closed socket
Matej Habrnal 62f98d
during the clean_up process and it raises a BrokenPipe exception. We must
Matej Habrnal 62f98d
ensure that no message will be printed after SIGTERM is recieved.
Matej Habrnal 62f98d
Matej Habrnal 62f98d
Related to: #1255259
Matej Habrnal 62f98d
Matej Habrnal 62f98d
Signed-off-by: Matej Habrnal <mhabrnal@redhat.com>
Matej Habrnal 62f98d
---
Matej Habrnal 62f98d
 src/plugins/abrt-action-install-debuginfo.in | 5 ++++-
Matej Habrnal 62f98d
 1 file changed, 4 insertions(+), 1 deletion(-)
Matej Habrnal 62f98d
Matej Habrnal 62f98d
diff --git a/src/plugins/abrt-action-install-debuginfo.in b/src/plugins/abrt-action-install-debuginfo.in
Matej Habrnal 62f98d
index bb72695..f9eb596 100644
Matej Habrnal 62f98d
--- a/src/plugins/abrt-action-install-debuginfo.in
Matej Habrnal 62f98d
+++ b/src/plugins/abrt-action-install-debuginfo.in
Matej Habrnal 62f98d
@@ -44,7 +44,7 @@ def init_gettext():
Matej Habrnal 62f98d
     gettext.textdomain(GETTEXT_PROGNAME)
Matej Habrnal 62f98d
 
Matej Habrnal 62f98d
 def sigterm_handler(signum, frame):
Matej Habrnal 62f98d
-    clean_up(TMPDIR)
Matej Habrnal 62f98d
+    clean_up(TMPDIR, silent=True)
Matej Habrnal 62f98d
     exit(RETURN_OK)
Matej Habrnal 62f98d
 
Matej Habrnal 62f98d
 def sigint_handler(signum, frame):
Matej Habrnal 62f98d
@@ -241,6 +241,9 @@ if __name__ == "__main__":
Matej Habrnal 62f98d
         try:
Matej Habrnal 62f98d
             result = downloader.download(missing, download_exact_files=exact_fls)
Matej Habrnal 62f98d
         except Exception as ex:
Matej Habrnal 62f98d
+            if ex.errno == errno.EPIPE:
Matej Habrnal 62f98d
+                clean_up(TMPDIR, silent=True)
Matej Habrnal 62f98d
+                exit(RETURN_FAILURE)
Matej Habrnal 62f98d
             error_msg_and_die("Can't download debuginfos: %s", ex)
Matej Habrnal 62f98d
 
Matej Habrnal 62f98d
         if exact_fls:
Matej Habrnal 62f98d
-- 
Matej Habrnal 62f98d
2.5.5
Matej Habrnal 62f98d