updated wxExecute checks in wxGTK to be same as in other Unix ports after recent changes
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51310 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -224,15 +224,27 @@ void GTK_EndProcessDetector(gpointer data, gint source,
|
|||||||
int status = 0;
|
int status = 0;
|
||||||
int rc = waitpid(pid, &status, WNOHANG);
|
int rc = waitpid(pid, &status, WNOHANG);
|
||||||
|
|
||||||
if ( rc == 0 )
|
if ( rc == 0 )
|
||||||
{
|
{
|
||||||
// no, it didn't exit yet, continue waiting
|
// This can only happen if the child application closes our dummy
|
||||||
return;
|
// pipe that is used to monitor its lifetime; in that case, our
|
||||||
}
|
// best bet is to pretend the process did terminate, because
|
||||||
|
// otherwise wxExecute() would hang indefinitely
|
||||||
|
// (OnExceptionWaiting() won't be called again, the descriptor
|
||||||
|
// is closed now).
|
||||||
|
wxLogDebug("Child process (PID %i) still alive, even though notification was received that it terminated.", pid);
|
||||||
|
}
|
||||||
|
else if ( rc == -1 )
|
||||||
|
{
|
||||||
|
// As above, if waitpid() fails, the best we can do is to log the
|
||||||
|
// error and pretend the child terminated:
|
||||||
|
wxLogSysError(_("Failed to check child process' status"));
|
||||||
|
}
|
||||||
|
|
||||||
// set exit code to -1 if something bad happened
|
// set exit code to -1 if something bad happened
|
||||||
proc_data->exitcode = rc != -1 && WIFEXITED(status) ? WEXITSTATUS(status)
|
proc_data->exitcode = (rc > 0 && WIFEXITED(status))
|
||||||
: -1;
|
? WEXITSTATUS(status)
|
||||||
|
: -1;
|
||||||
|
|
||||||
// child exited, end waiting
|
// child exited, end waiting
|
||||||
close(source);
|
close(source);
|
||||||
|
Reference in New Issue
Block a user