Avoid to call UI functions in child process
ui_print uses a mutex to protect the critical section. And a forked child process may intialize the mutex inappropriatly, which leads to a hanging child process. So we shall avoid to call the UI functions in child process. Bug: 34769056 Test: fake ota on fugu failed as expected due to updater format mismatch. Change-Id: I81bc942a796878fac19cf712512092c2b0d807c9
This commit is contained in:
+5
-1
@@ -382,7 +382,11 @@ static int try_update_binary(const char* path, ZipArchiveHandle zip, bool* wipe_
|
||||
umask(022);
|
||||
close(pipefd[0]);
|
||||
execv(chr_args[0], const_cast<char**>(chr_args));
|
||||
PLOG(ERROR) << "Can't run " << chr_args[0];
|
||||
// Bug: 34769056
|
||||
// We shouldn't use LOG/PLOG in the forked process, since they may cause
|
||||
// the child process to hang. This deadlock results from an improperly
|
||||
// copied mutex in the ui functions.
|
||||
fprintf(stdout, "E:Can't run %s (%s)\n", chr_args[0], strerror(errno));
|
||||
_exit(-1);
|
||||
}
|
||||
close(pipefd[1]);
|
||||
|
||||
Reference in New Issue
Block a user