cleaned up the waitpid() result processing mess
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@11768 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -298,52 +298,28 @@ void wxHandleProcessTermination(wxEndProcessData *proc_data)
|
|||||||
}
|
}
|
||||||
while ( rc == -1 && errno == EINTR );
|
while ( rc == -1 && errno == EINTR );
|
||||||
|
|
||||||
if (rc == -1)
|
// notify user about termination if required
|
||||||
|
if ( proc_data->process )
|
||||||
{
|
{
|
||||||
// JACS: this could happen if the process was terminated and waitpid called,
|
proc_data->process->OnTerminate
|
||||||
// so commenting out for now.
|
(
|
||||||
//wxLogSysError(_("Waiting for subprocess termination failed (return code = -1)"));
|
proc_data->pid,
|
||||||
|
(rc == 0) && WIFEXITED(status)
|
||||||
|
? WEXITSTATUS(status)
|
||||||
|
: -1
|
||||||
|
);
|
||||||
}
|
}
|
||||||
else if (! (WIFEXITED(status)))
|
// clean up
|
||||||
|
if ( proc_data->pid > 0 )
|
||||||
{
|
{
|
||||||
wxLogSysError(_("Waiting for subprocess termination failed (WIFEXITED returned zero)"));
|
delete proc_data;
|
||||||
|
|
||||||
/* AFAIK, this can only happen if something went wrong within
|
|
||||||
wxGTK, i.e. due to a race condition or some serious bug.
|
|
||||||
After having fixed the order of statements in
|
|
||||||
GTK_EndProcessDetector(). (KB)
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
else if (WIFSIGNALED(status))
|
else
|
||||||
{
|
{
|
||||||
wxLogSysError(_("Waiting for subprocess termination failed (signal not caught)"));
|
// wxExecute() will know about it
|
||||||
|
proc_data->exitcode = status;
|
||||||
/* AFAIK, this can only happen if something went wrong within
|
|
||||||
wxGTK, i.e. due to a race condition or some serious bug.
|
|
||||||
After having fixed the order of statements in
|
|
||||||
GTK_EndProcessDetector(). (KB)
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
// else
|
|
||||||
{
|
|
||||||
// notify user about termination if required
|
|
||||||
if (proc_data->process)
|
|
||||||
{
|
|
||||||
proc_data->process->OnTerminate(proc_data->pid,
|
|
||||||
WEXITSTATUS(status));
|
|
||||||
}
|
|
||||||
// clean up
|
|
||||||
if ( proc_data->pid > 0 )
|
|
||||||
{
|
|
||||||
delete proc_data;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// wxExecute() will know about it
|
|
||||||
proc_data->exitcode = status;
|
|
||||||
|
|
||||||
proc_data->pid = 0;
|
proc_data->pid = 0;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user