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/dumpstate.cpp b/cmds/dumpstate/dumpstate.cpp
index bb485bf..30ddec3 100644
--- a/cmds/dumpstate/dumpstate.cpp
+++ b/cmds/dumpstate/dumpstate.cpp
@@ -201,7 +201,8 @@
         execl("/system/bin/atrace", "/system/bin/atrace", "--async_dump", nullptr);
         // execl should never return, but if it did, we need to exit.
         MYLOGD("execl on '/system/bin/atrace --async_dump' failed: %s", strerror(errno));
-        exit(EXIT_FAILURE);
+        // Must call _exit (instead of exit), otherwise it will corrupt the zip file.
+        _exit(EXIT_FAILURE);
     } else {
         close(pipefd[1]);  // close the write end of the pipe in the parent
         add_zip_entry_from_fd("systrace.txt", pipefd[0]); // write output to zip file