]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/corefoundation/utilsexc_cf.cpp
fixing compile problem, but is it the best way to fix it ?
[wxWidgets.git] / src / mac / corefoundation / utilsexc_cf.cpp
index d32a8c8a5aaa5b1cf177ea151c42bbc1209f39b3..c4684fb25ffac536ee752b3cd5a208748a3eb9b8 100644 (file)
@@ -17,6 +17,7 @@
 #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"
@@ -51,7 +52,14 @@ class wxProcessTerminationEventHandler: public wxEvtHandler
     {
         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;
@@ -309,13 +317,13 @@ int wxAddProcessCallback(wxEndProcessData *proc_data, int fd)
     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);