Call _exit() instead of exit() on child failure.
As explained on man _exit:
"The function _exit() terminates the calling process "immediately".
Any open file descriptors belonging to the process are closed;"
If exit() is called instead, the resulting zip file will be corrupted.
BUG: 27900023
BUG: 27804637
Change-Id: I6591749603753d6016f350c629b7082cf6780ae2
diff --git a/cmds/dumpstate/utils.cpp b/cmds/dumpstate/utils.cpp
index 8129852..8c0e840 100644
--- a/cmds/dumpstate/utils.cpp
+++ b/cmds/dumpstate/utils.cpp
@@ -746,7 +746,8 @@
// it's safer to exit dumpstate.
MYLOGD("execvp on command '%s' failed (error: %s)", command, strerror(errno));
fflush(stdout);
- exit(EXIT_FAILURE);
+ // Must call _exit (instead of exit), otherwise it will corrupt the zip file.
+ _exit(EXIT_FAILURE);
}
/* handle parent case */