OSDN Git Service

Fixed send_broadcast and fork handling issues.
authorFelipe Leme <felipeal@google.com>
Wed, 23 Mar 2016 23:47:00 +0000 (16:47 -0700)
committerFelipe Leme <felipeal@google.com>
Wed, 23 Mar 2016 23:55:41 +0000 (16:55 -0700)
send_broadcast() was calling run_command_always(char*, bool, int, char*) passing:
    run_command_always(NULL, 20, true, am_args);

I.e., it was passing "true" (!1) as the boolean, and 1 (true) as the
timeout value; the proper call should be:

    run_command_always(NULL, true, 20, am_args);

Also, the code handling failure on child calls was calling _exit(),
which quits dumpstate - it should simply return the function instead.

BUG: 27804637

Change-Id: If8c9b40eddc8b76f92e6d11078dfe446a39ad4d4

cmds/dumpstate/dumpstate.cpp
cmds/dumpstate/utils.cpp

index 604aea6..9507ac6 100644 (file)
@@ -200,7 +200,7 @@ static void dump_systrace() {
         execl("/system/bin/atrace", "/system/bin/atrace", "--async_dump", nullptr);
         // execl should never return, but it doesn't hurt to handle that scenario
         MYLOGD("execl on '/system/bin/atrace --async_dump' returned control");
-        _exit(-1);
+        return;
     } 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
index 3fa2141..975cd27 100644 (file)
@@ -723,7 +723,7 @@ int run_command_always(const char *title, bool drop_root, int timeout_seconds, c
     if (pid == 0) {
         if (drop_root && !drop_root_user()) {
             printf("*** could not drop root before running %s: %s\n", command, strerror(errno));
-            _exit(-1);
+            return -1;
         }
 
         /* make sure the child dies when dumpstate dies */
@@ -739,7 +739,7 @@ int run_command_always(const char *title, bool drop_root, int timeout_seconds, c
         // execvp's result will be handled after waitpid_with_timeout() below...
         MYLOGD("execvp on command %s returned control (error: %s)", command, strerror(errno));
         fflush(stdout);
-        _exit(-1); // ...but it doesn't hurt to force exit, just in case
+        return -1; // ...but it doesn't hurt to force exit, just in case
     }
 
     /* handle parent case */
@@ -851,7 +851,7 @@ void send_broadcast(const std::string& action, const std::vector<std::string>& a
     std::string args_string;
     format_args(am_index + 1, am_args, &args_string);
     MYLOGD("send_broadcast command: %s\n", args_string.c_str());
-    run_command_always(NULL, 20, true, am_args);
+    run_command_always(NULL, true, 20, am_args);
 }
 
 size_t num_props = 0;