#endif //ndef WX_PRECOMP
#include "wx/unix/execute.h"
#include "wx/stdpaths.h"
+#include "wx/app.h"
#include "wx/apptrait.h"
#include "wx/thread.h"
#include "wx/process.h"
{
Disconnect(-1, wxEVT_END_PROCESS, wxProcessEventHandler(wxProcessTerminationEventHandler::OnTerminate));
wxHandleProcessTermination(m_data);
- delete this;
+
+ // NOTE: We don't use this to delay destruction until the next idle run but rather to
+ // avoid killing ourselves while our caller (which is our wxEvtHandler superclass
+ // ProcessPendingEvents) still needs our m_eventsLocker to be valid.
+ // Since we're in the GUI library we can guarantee that ScheduleForDestroy is using
+ // the GUI implementation which delays destruction and not the base implementation
+ // which does it immediately.
+ wxTheApp->GetTraits()->ScheduleForDestroy(this);
}
wxEndProcessData* m_data;
#include <mach/mach.h>
}
-void wxMAC_MachPortEndProcessDetect(CFMachPortRef port, void *data)
+void wxMAC_MachPortEndProcessDetect(CFMachPortRef WXUNUSED(port), void *data)
{
wxEndProcessData *proc_data = (wxEndProcessData*)data;
wxLogDebug(wxT("Process ended"));
Called due to source signal detected by the CFRunLoop.
This is nearly identical to the wxGTK equivalent.
*/
-extern "C" void WXCF_EndProcessDetector(CFSocketRef s, CFSocketCallBackType callbackType, CFDataRef address, void const *data, void *info)
+extern "C" void WXCF_EndProcessDetector(CFSocketRef s,
+ CFSocketCallBackType WXUNUSED(callbackType),
+ CFDataRef WXUNUSED(address),
+ void const *WXUNUSED(data),
+ void *info)
{
wxEndProcessData * const proc_data = static_cast<wxEndProcessData*>(info);
CFSocketRef cfSocket = CFSocketCreateWithNative(kCFAllocatorDefault,fd,kCFSocketReadCallBack,&WXCF_EndProcessDetector,&context);
if(cfSocket == NULL)
{
- wxLogError("Failed to create socket for end process detection");
+ wxLogError(wxT("Failed to create socket for end process detection"));
return 0;
}
CFRunLoopSourceRef runLoopSource = CFSocketCreateRunLoopSource(kCFAllocatorDefault, cfSocket, /*highest priority:*/0);
if(runLoopSource == NULL)
{
- wxLogError("Failed to create CFRunLoopSource from CFSocket for end process detection");
+ wxLogError(wxT("Failed to create CFRunLoopSource from CFSocket for end process detection"));
// closes the fd.. we can't really stop it, nor do we necessarily want to.
CFSocketInvalidate(cfSocket);
CFRelease(cfSocket);