diff options
| author | Michal Toman <mtoman@redhat.com> | 2011-05-03 12:54:36 +0200 |
|---|---|---|
| committer | Michal Toman <mtoman@redhat.com> | 2011-05-03 12:54:36 +0200 |
| commit | e6bc565db2eb093ea9a9ba1a33b77ea6ad7199d1 (patch) | |
| tree | 1d23987540fed6323a37db524cad820440b0eb3d | |
| parent | c8eaac58e73d67fa1e05b419ec7f3f51afd226bb (diff) | |
| download | abrt-e6bc565db2eb093ea9a9ba1a33b77ea6ad7199d1.tar.gz abrt-e6bc565db2eb093ea9a9ba1a33b77ea6ad7199d1.tar.xz abrt-e6bc565db2eb093ea9a9ba1a33b77ea6ad7199d1.zip | |
retrace server: do not create zombie workers
| -rw-r--r-- | src/retrace/create.wsgi | 2 | ||||
| -rw-r--r-- | src/retrace/worker.c | 15 |
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) |
