summaryrefslogtreecommitdiff
path: root/src/couchdb/priv/spawnkillable
diff options
context:
space:
mode:
authorMark Hammond <mhammond@apache.org>2009-12-02 06:38:23 +0000
committerMark Hammond <mhammond@apache.org>2009-12-02 06:38:23 +0000
commit1902392ba62849c39fc14b2ec893e531ea9e00b3 (patch)
tree915d45a8a3e8225d816809ec2bbb36d27ffde6f8 /src/couchdb/priv/spawnkillable
parent095a1fbc228554e616ca5501604a4a04832d2266 (diff)
ensure the child exit code is reported correctly to couch
git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@886061 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/couchdb/priv/spawnkillable')
-rw-r--r--src/couchdb/priv/spawnkillable/couchspawnkillable_win.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/couchdb/priv/spawnkillable/couchspawnkillable_win.c b/src/couchdb/priv/spawnkillable/couchspawnkillable_win.c
index f812711e..06782315 100644
--- a/src/couchdb/priv/spawnkillable/couchspawnkillable_win.c
+++ b/src/couchdb/priv/spawnkillable/couchspawnkillable_win.c
@@ -16,7 +16,8 @@
// * Write a line to stdout, consisting of the path to ourselves, plus
// '--kill {pid}' where {pid} is the PID of the newly created process.
// * Un-suspend the new process.
-// * Terminate
+// * Wait for the process to terminate.
+// * Terminate with the child's exit-code.
// Later, couch will call us with --kill and the PID, so we dutifully
// terminate the specified PID.
@@ -112,6 +113,7 @@ int main(int argc, char **argv)
char out_buf[1024];
int rc;
DWORD cbwritten;
+ DWORD exitcode;
PROCESS_INFORMATION pi;
if (argc==3 && strcmp(argv[1], "--kill")==0) {
HANDLE h = OpenProcess(PROCESS_TERMINATE, 0, atoi(argv[2]));
@@ -134,6 +136,10 @@ int main(int argc, char **argv)
&cbwritten, NULL);
// Let the child process go...
ResumeThread(pi.hThread);
- // and that is all - we can die...
- return 0;
+ // Wait for the process to terminate so we can reflect the exit code
+ // back to couch.
+ WaitForSingleObject(pi.hProcess, INFINITE);
+ if (!GetExitCodeProcess(pi.hProcess, &exitcode))
+ return 6;
+ return exitcode;
}