diff --git a/pgadmin/dlg/dlgClasses.cpp b/pgadmin/dlg/dlgClasses.cpp index 68e96fc..8b91ae2 100644 --- a/pgadmin/dlg/dlgClasses.cpp +++ b/pgadmin/dlg/dlgClasses.cpp @@ -607,6 +607,7 @@ ExternProcessDialog::ExternProcessDialog(frmMain *frame) : DialogWithHelp(frame) txtMessages = 0; process = 0; done = false; + processID = 0; timer = new wxTimer(this, TIMER_ID); } @@ -645,12 +646,18 @@ bool ExternProcessDialog::Execute(int step, bool finalStep) txtMessages->AppendText(GetDisplayCmd(step) + END_OF_LINE); if (process) + { delete process; + process = NULL; + processID = 0; + } process = new sysProcess(this); process->SetEnvironment(environment); - if (wxExecute(GetCmd(step), wxEXEC_ASYNC, process)) + processID = wxExecute(GetCmd(step), wxEXEC_ASYNC, process); + + if (processID) { wxNotebook *nb = CTRL_NOTEBOOK("nbNotebook"); if (nb) @@ -665,6 +672,8 @@ bool ExternProcessDialog::Execute(int step, bool finalStep) else { delete process; + process = NULL; + processID = 0; return false; } } @@ -733,6 +742,7 @@ void ExternProcessDialog::OnEndProcess(wxProcessEvent &ev) if (process) { delete process; + processID = 0; process = 0; } btnOK->Enable(); @@ -746,9 +756,9 @@ void ExternProcessDialog::Abort() if (process) { done = false; - sysProcess *tmpProcess = process; - process = 0; - tmpProcess->Abort(); - delete tmpProcess; + // Kill the child process started with wxExecute in Execute method + wxKill(processID); + processID = 0; } } + diff --git a/pgadmin/include/dlg/dlgClasses.h b/pgadmin/include/dlg/dlgClasses.h index f8a9f72..038a5c1 100644 --- a/pgadmin/include/dlg/dlgClasses.h +++ b/pgadmin/include/dlg/dlgClasses.h @@ -167,6 +167,7 @@ protected: wxTextCtrl *txtMessages; sysProcess *process; bool done, final; + long processID; wxArrayString environment; #if __GNUC__ >= 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)