Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ab1abae5 authored by Tianjie Xu's avatar Tianjie Xu
Browse files

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
parent 56ff8061
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -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]);