From 0a684e2c013e7a64c16dfb5b980fd4bdafaf4c9a Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Thu, 3 Nov 2016 10:57:10 +0100 Subject: [PATCH] daemon: properly shutdown socket connection Upon a new connection from a peer abrtd creates a connection fd and spawns a new process that executes abrt-server. The new process duplicates the connection fd to STDIN_FILENO and STDOUT_FILENO. When abrt-sever is done with creation of a dump directory it sends a message about that and closes STDOUT_FILENO to shut down the connection. However, abrt-server leaves STDIN_FILENO opened and thus the connection is not closed. This has a negative effect on the Python exception handler that waits until the connection is closed - effectively, it delays restarts of crashed processes. Signed-off-by: Jakub Filak --- src/daemon/abrt-server.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/daemon/abrt-server.c b/src/daemon/abrt-server.c index 60eb9b66..182e110e 100644 --- a/src/daemon/abrt-server.c +++ b/src/daemon/abrt-server.c @@ -624,6 +624,11 @@ static int create_problem_dir(GHashTable *problem_info, unsigned pid) */ printf("HTTP/1.1 201 Created\r\n\r\n"); fflush(NULL); + + /* Closing STDIN_FILENO (abrtd duped the socket to stdin and stdout) and + * not-replacing it with something else to let abrt-server die on reading + * from invalid stdin - to catch bugs. */ + close(STDIN_FILENO); close(STDOUT_FILENO); xdup2(STDERR_FILENO, STDOUT_FILENO); /* paranoia: don't leave stdout fd closed */ -- 2.26.2