This changes the meaning of Process::TERMINATED to "currently in termination but we're not sure what happened to it"
Signed-off-by: Peter Hutterer <[email protected]> --- include/xorg/gtest/xorg-gtest-process.h | 5 ++++- src/process.cpp | 17 ++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/include/xorg/gtest/xorg-gtest-process.h b/include/xorg/gtest/xorg-gtest-process.h index f1fc0ec..8c581db 100644 --- a/include/xorg/gtest/xorg-gtest-process.h +++ b/include/xorg/gtest/xorg-gtest-process.h @@ -70,6 +70,8 @@ class Process { * * A process in state ERROR or NONE will fail to Kill() or Terminate() * * A process in state FINISHED_SUCCESS or FINISHED_FAILURE will always * succeed to Kill() or Terminate() + * * A process in state TERMINATED may change state to FINISHED_SUCCESS + * or FINISHED_FAILURE when queried again. */ enum State { ERROR, /**< An error has occured, state is now unknown */ @@ -77,7 +79,8 @@ class Process { RUNNING, /**< The process has been started */ FINISHED_SUCCESS, /**< The process finished with an exit code of 0 */ FINISHED_FAILURE, /**< The process finished with a non-zero exit code */ - TERMINATED, /**< The process was successfully terminated by this library */ + TERMINATED, /**< The process was successfully terminated by this + library but it's state is currently unknown */ }; /** diff --git a/src/process.cpp b/src/process.cpp index a9c041e..0b0ddc3 100644 --- a/src/process.cpp +++ b/src/process.cpp @@ -131,9 +131,15 @@ bool xorg::testing::Process::WaitForExit(unsigned int timeout) { int status; int pid = waitpid(Pid(), &status, WNOHANG); - if (pid == Pid()) - return true; - else if (pid == -1) + if (pid == Pid()) { + if (WIFEXITED(status)) { + d_->state = WEXITSTATUS(status) ? FINISHED_FAILURE : FINISHED_SUCCESS; + return true; + } else if (WIFSIGNALED(status)) { + d_->state = FINISHED_FAILURE; + return true; + } + } else if (pid == -1) return errno == ECHILD; usleep(10); @@ -171,8 +177,9 @@ bool xorg::testing::Process::KillSelf(int signal, unsigned int timeout) { bool wait_success = true; wait_success = WaitForExit(timeout); - if (!wait_success) - return false; + if (wait_success) + d_->pid = -1; + return wait_success; } d_->pid = -1; } -- 1.7.11.4 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
