From: John L. <jr...@us...> - 2006-12-11 07:03:33
|
Update of /cvsroot/wxlua/wxLua/modules/wxluasocket/src In directory sc8-pr-cvs9.sourceforge.net:/tmp/cvs-serv6932/wxLua/modules/wxluasocket/src Modified Files: wxldserv.cpp wxluasocket.cpp Log Message: try to fix crashing in MSW while trying to kill debuggee process Index: wxldserv.cpp =================================================================== RCS file: /cvsroot/wxlua/wxLua/modules/wxluasocket/src/wxldserv.cpp,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** wxldserv.cpp 8 Dec 2006 06:16:17 -0000 1.32 --- wxldserv.cpp 11 Dec 2006 07:03:30 -0000 1.33 *************** *** 198,208 **** wxLuaDebuggerBase::~wxLuaDebuggerBase() { ! if ((m_debuggeeProcess != NULL) && (m_debuggeeProcessID > 0)) { // NULL the process before deleting so it won't try to delete it again wxLuaDebuggerProcess *p = m_debuggeeProcess; m_debuggeeProcess = NULL; ! if (p->Exists(m_debuggeeProcessID)) ! p->Kill(m_debuggeeProcessID, wxSIGKILL); } } --- 198,207 ---- wxLuaDebuggerBase::~wxLuaDebuggerBase() { ! if ((m_debuggeeProcess != NULL)) // && (m_debuggeeProcessID > 0)) { // NULL the process before deleting so it won't try to delete it again wxLuaDebuggerProcess *p = m_debuggeeProcess; m_debuggeeProcess = NULL; ! delete p; } } *************** *** 586,596 **** void wxLuaDebuggerBase::OnEndDebugeeProcess(wxProcessEvent& event) { ! m_debuggeeProcess = NULL; ! m_debuggeeProcessID = -1; ! wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_EXIT, this); ! debugEvent.SetMessage(wxString::Format(wxT("Process (%d) ended with exit code : %d"), event.GetPid(), event.GetExitCode())); ! ProcessEvent(debugEvent); ! event.Skip(); } --- 585,616 ---- void wxLuaDebuggerBase::OnEndDebugeeProcess(wxProcessEvent& event) { ! // The process's OnTerminate will null m_debuggeeProcess, ! // but if in destructor it's already NULL and don't send event. ! if (m_debuggeeProcess != NULL) ! { ! wxLuaDebuggerEvent debugEvent(wxEVT_WXLUA_DEBUGGER_EXIT, this); ! debugEvent.SetMessage(wxString::Format(wxT("Process (%d) ended with exit code : %d"), event.GetPid(), event.GetExitCode())); ! ProcessEvent(debugEvent); ! event.Skip(); ! } ! } ! bool wxLuaDebuggerBase::KillDebuggee() ! { ! if ((m_debuggeeProcess != NULL) && (m_debuggeeProcessID > 0)) ! { ! if (m_debuggeeProcess->Exists(m_debuggeeProcessID)) ! m_debuggeeProcess->Kill(m_debuggeeProcessID, wxSIGKILL); ! } ! ! if (m_debuggeeProcess != NULL) ! { ! wxLuaDebuggerProcess* p = m_debuggeeProcess; ! m_debuggeeProcess = NULL; ! delete p; ! m_debuggeeProcessID = -1; ! } ! ! return true; } *************** *** 673,676 **** --- 693,700 ---- m_debuggeeProcessID = wxExecute(command, wxEXEC_ASYNC, m_debuggeeProcess); + + if (m_debuggeeProcessID < 1) + KillDebuggee(); + return (m_debuggeeProcessID > 0); } Index: wxluasocket.cpp =================================================================== RCS file: /cvsroot/wxlua/wxLua/modules/wxluasocket/src/wxluasocket.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** wxluasocket.cpp 4 Oct 2006 22:07:23 -0000 1.7 --- wxluasocket.cpp 11 Dec 2006 07:03:30 -0000 1.8 *************** *** 270,277 **** } ! // void DisplayStackDialog(wxWindow *pParent) static int LUACALL wxLua_wxLuaDebuggerServer_DisplayStackDialog(lua_State *L) { wxLuaState wxlState(L); // wxWindow pParent wxWindow * pParent = (wxWindow *)wxlState.GetUserDataType(2, s_wxluatag_wxWindow); --- 270,281 ---- } ! // void DisplayStackDialog(wxWindow *pParent, wxWindowID id = wxID_ANY) static int LUACALL wxLua_wxLuaDebuggerServer_DisplayStackDialog(lua_State *L) { wxLuaState wxlState(L); + // get number of arguments + int argCount = lua_gettop(L); + // wxWindowID id = wxID_ANY + wxWindowID id = (argCount >= 3 ? (wxWindowID)wxlState.GetNumberType(3) : wxID_ANY); // wxWindow pParent wxWindow * pParent = (wxWindow *)wxlState.GetUserDataType(2, s_wxluatag_wxWindow); *************** *** 279,287 **** wxLuaDebuggerServer * self = (wxLuaDebuggerServer *)wxlState.GetUserDataType(1, s_wxluatag_wxLuaDebuggerServer); // call DisplayStackDialog ! self->DisplayStackDialog(pParent); return 0; } static int LUACALL wxLua_wxLuaDebuggerServer_destructor(lua_State *L) { --- 283,347 ---- wxLuaDebuggerServer * self = (wxLuaDebuggerServer *)wxlState.GetUserDataType(1, s_wxluatag_wxLuaDebuggerServer); // call DisplayStackDialog ! self->DisplayStackDialog(pParent, id); return 0; } + // long GetDebuggeeProcessId() const + static int LUACALL wxLua_wxLuaDebuggerServer_GetDebuggeeProcessId(lua_State *L) + { + wxLuaState wxlState(L); + long returns; + // get this + wxLuaDebuggerServer * self = (wxLuaDebuggerServer *)wxlState.GetUserDataType(1, s_wxluatag_wxLuaDebuggerServer); + // call GetDebuggeeProcessId + returns = self->GetDebuggeeProcessId(); + // push the result number + lua_pushnumber(L, returns); + + return 1; + } + + // bool KillDebuggee() + static int LUACALL wxLua_wxLuaDebuggerServer_KillDebuggee(lua_State *L) + { + wxLuaState wxlState(L); + bool returns; + // get this + wxLuaDebuggerServer * self = (wxLuaDebuggerServer *)wxlState.GetUserDataType(1, s_wxluatag_wxLuaDebuggerServer); + // call KillDebuggee + returns = self->KillDebuggee(); + // push the result flag + lua_pushboolean(L, returns); + + return 1; + } + + // static wxString GetProgramName() + static int LUACALL wxLua_wxLuaDebuggerServer_GetProgramName(lua_State *L) + { + wxLuaState wxlState(L); + wxString returns; + // call GetProgramName + returns = wxLuaDebuggerServer::GetProgramName(); + // push the result string + lua_pushstring(L, wx2lua(returns) ); + + return 1; + } + + // static wxString GetNetworkName() + static int LUACALL wxLua_wxLuaDebuggerServer_GetNetworkName(lua_State *L) + { + wxLuaState wxlState(L); + wxString returns; + // call GetNetworkName + returns = wxLuaDebuggerServer::GetNetworkName(); + // push the result string + lua_pushstring(L, wx2lua(returns) ); + + return 1; + } + static int LUACALL wxLua_wxLuaDebuggerServer_destructor(lua_State *L) { *************** *** 330,334 **** { LuaMethod, "Reset", wxLua_wxLuaDebuggerServer_Reset, 0, 0, { 0 } }, { LuaMethod, "EvaluateExpr", wxLua_wxLuaDebuggerServer_EvaluateExpr, 2, 2, { &s_wxluaarg_Number, &s_wxluaarg_String, 0 } }, ! { LuaMethod, "DisplayStackDialog", wxLua_wxLuaDebuggerServer_DisplayStackDialog, 1, 1, { &s_wxluatag_wxWindow, 0 } }, { LuaDelete, "wxLuaDebuggerServer", wxLua_wxLuaDebuggerServer_destructor, 0, 0, {0} }, { LuaMethod, "Delete", wxLua_wxLuaDebuggerServer_Delete, 0, 0, {0} }, --- 390,398 ---- { LuaMethod, "Reset", wxLua_wxLuaDebuggerServer_Reset, 0, 0, { 0 } }, { LuaMethod, "EvaluateExpr", wxLua_wxLuaDebuggerServer_EvaluateExpr, 2, 2, { &s_wxluaarg_Number, &s_wxluaarg_String, 0 } }, ! { LuaMethod, "DisplayStackDialog", wxLua_wxLuaDebuggerServer_DisplayStackDialog, 2, 1, { &s_wxluatag_wxWindow, &s_wxluaarg_Number, 0 } }, ! { LuaMethod, "GetDebuggeeProcessId", wxLua_wxLuaDebuggerServer_GetDebuggeeProcessId, 0, 0, { 0 } }, ! { LuaMethod, "KillDebuggee", wxLua_wxLuaDebuggerServer_KillDebuggee, 0, 0, { 0 } }, ! { LuaMethod, "GetProgramName", wxLua_wxLuaDebuggerServer_GetProgramName, 0, 0, { 0 } }, ! { LuaMethod, "GetNetworkName", wxLua_wxLuaDebuggerServer_GetNetworkName, 0, 0, { 0 } }, { LuaDelete, "wxLuaDebuggerServer", wxLua_wxLuaDebuggerServer_destructor, 0, 0, {0} }, { LuaMethod, "Delete", wxLua_wxLuaDebuggerServer_Delete, 0, 0, {0} }, |