From e6bc565db2eb093ea9a9ba1a33b77ea6ad7199d1 Mon Sep 17 00:00:00 2001 From: Michal Toman Date: Tue, 3 May 2011 12:54:36 +0200 Subject: retrace server: do not create zombie workers --- src/retrace/create.wsgi | 2 +- src/retrace/worker.c | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/retrace/create.wsgi b/src/retrace/create.wsgi index e26ae0cc..7c5f81b4 100644 --- a/src/retrace/create.wsgi +++ b/src/retrace/create.wsgi @@ -104,7 +104,7 @@ def application(environ, start_response): return response(start_response, "403 Forbidden", "Required file \"%s\" is missing" % required_file) - Popen(["/usr/bin/abrt-retrace-worker", "%d" % taskid]) + call(["/usr/bin/abrt-retrace-worker", "%d" % taskid]) return response(start_response, "201 Created", "", [("X-Task-Id", "%d" % taskid), diff --git a/src/retrace/worker.c b/src/retrace/worker.c index 83773e61..8207a032 100644 --- a/src/retrace/worker.c +++ b/src/retrace/worker.c @@ -50,7 +50,20 @@ int main(int argc, char **argv) /* required by mock to be able to write into result directory */ setenv("SUDO_GID", "0", 1); - /* launch worker.py */ + /* fork and launch worker.py */ + pid = fork(); + + if (pid < 0) + { + fputs("Unable to fork.", stderr); + return 6; + } + + /* parent - exit */ + if (pid > 0) + return 0; + + /* child */ sprintf(command, "/usr/bin/python /usr/share/abrt-retrace/worker.py \"%s\"", argv[1]); pipe = popen(command, "r"); if (pipe == NULL) -- cgit