summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Toman <mtoman@redhat.com>2011-05-03 12:54:36 +0200
committerMichal Toman <mtoman@redhat.com>2011-05-03 12:54:36 +0200
commite6bc565db2eb093ea9a9ba1a33b77ea6ad7199d1 (patch)
tree1d23987540fed6323a37db524cad820440b0eb3d
parentc8eaac58e73d67fa1e05b419ec7f3f51afd226bb (diff)
downloadabrt-e6bc565db2eb093ea9a9ba1a33b77ea6ad7199d1.tar.gz
abrt-e6bc565db2eb093ea9a9ba1a33b77ea6ad7199d1.tar.xz
abrt-e6bc565db2eb093ea9a9ba1a33b77ea6ad7199d1.zip
retrace server: do not create zombie workers
-rw-r--r--src/retrace/create.wsgi2
-rw-r--r--src/retrace/worker.c15
2 files changed, 15 insertions, 2 deletions
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)