]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/memory.cpp
applying patch, fixes #10523
[wxWidgets.git] / src / common / memory.cpp
index 9bf20f536b4b61fe20d6b3701950b4b8b83bf495..993b39a7a92a1e08e5fe641df8a8f9ed47136005 100644 (file)
@@ -39,7 +39,7 @@
 #include "wx/ioswrap.h"
 
 #if !defined(__WATCOMC__) && !(defined(__VMS__) && ( __VMS_VER < 70000000 ) )\
-     && !defined( __MWERKS__ ) && !defined(__SALFORDC__)
+     && !defined( __MWERKS__ )
 #include <memory.h>
 #endif
 
@@ -370,7 +370,7 @@ void wxMemStruct::Dump ()
     msg2.Printf(wxT(" at 0x%lX, size %d"), (long)GetActualData(), (int)RequestSize());
     msg += msg2;
 
-    wxDebugContext::OutputDumpLine(msg);
+    wxDebugContext::OutputDumpLine(msg.c_str());
   }
   else
   {
@@ -381,7 +381,7 @@ void wxMemStruct::Dump ()
     wxString msg2;
     msg2.Printf(wxT("non-object data at 0x%lX, size %d"), (long)GetActualData(), (int)RequestSize() );
     msg += msg2;
-    wxDebugContext::OutputDumpLine(msg);
+    wxDebugContext::OutputDumpLine(msg.c_str());
   }
 }
 
@@ -452,6 +452,9 @@ static wxMarkerType markerCalc[2];
 int wxDebugContext::m_balign = (int)((char *)&markerCalc[1] - (char*)&markerCalc[0]);
 int wxDebugContext::m_balignmask = (int)((char *)&markerCalc[1] - (char*)&markerCalc[0]) - 1;
 
+// Pointer to global function to call at shutdown
+wxShutdownNotifyFunction wxDebugContext::sm_shutdownFn;
+
 wxDebugContext::wxDebugContext(void)
 {
 }
@@ -573,7 +576,7 @@ void wxDebugContext::TraverseList (PmSFV func, wxMemStruct *from)
 bool wxDebugContext::PrintList (void)
 {
 #ifdef __WXDEBUG__
-  TraverseList ((PmSFV)&wxMemStruct::PrintNode, (checkPoint ? checkPoint->m_next : (wxMemStruct*)NULL));
+  TraverseList ((PmSFV)&wxMemStruct::PrintNode, (checkPoint ? checkPoint->m_next : NULL));
 
   return true;
 #else
@@ -585,13 +588,13 @@ bool wxDebugContext::Dump(void)
 {
 #ifdef __WXDEBUG__
   {
-    wxChar* appName = (wxChar*) wxT("application");
+    const wxChar* appName = wxT("application");
     wxString appNameStr;
     if (wxTheApp)
     {
         appNameStr = wxTheApp->GetAppName();
-        appName = WXSTRINGCAST appNameStr;
-        OutputDumpLine(wxT("----- Memory dump of %s at %s -----"), appName, WXSTRINGCAST wxNow() );
+        appName = appNameStr.c_str();
+        OutputDumpLine(wxT("----- Memory dump of %s at %s -----"), appName, static_cast<const wxChar *>(wxNow().c_str()));
     }
     else
     {
@@ -599,7 +602,7 @@ bool wxDebugContext::Dump(void)
     }
   }
 
-  TraverseList ((PmSFV)&wxMemStruct::Dump, (checkPoint ? checkPoint->m_next : (wxMemStruct*)NULL));
+  TraverseList ((PmSFV)&wxMemStruct::Dump, (checkPoint ? checkPoint->m_next : NULL));
 
   OutputDumpLine(wxEmptyString);
   OutputDumpLine(wxEmptyString);
@@ -641,13 +644,13 @@ bool wxDebugContext::PrintStatistics(bool detailed)
 {
 #ifdef __WXDEBUG__
   {
-    wxChar* appName = (wxChar*) wxT("application");
+    const wxChar* appName = wxT("application");
     wxString appNameStr;
     if (wxTheApp)
     {
         appNameStr = wxTheApp->GetAppName();
-        appName = WXSTRINGCAST appNameStr;
-        OutputDumpLine(wxT("----- Memory statistics of %s at %s -----"), appName, WXSTRINGCAST wxNow() );
+        appName = appNameStr.c_str();
+        OutputDumpLine(wxT("----- Memory statistics of %s at %s -----"), appName, static_cast<const wxChar *>(wxNow().c_str()));
     }
     else
     {
@@ -664,7 +667,7 @@ bool wxDebugContext::PrintStatistics(bool detailed)
 
   wxDebugStatsStruct *list = NULL;
 
-  wxMemStruct *from = (checkPoint ? checkPoint->m_next : (wxMemStruct*)NULL );
+  wxMemStruct *from = (checkPoint ? checkPoint->m_next : NULL );
   if (!from)
     from = wxDebugContext::GetHead ();
 
@@ -735,12 +738,12 @@ bool wxDebugContext::PrintStatistics(bool detailed)
 bool wxDebugContext::PrintClasses(void)
 {
   {
-    wxChar* appName = (wxChar*) wxT("application");
+    const wxChar* appName = wxT("application");
     wxString appNameStr;
     if (wxTheApp)
     {
         appNameStr = wxTheApp->GetAppName();
-        appName = WXSTRINGCAST appNameStr;
+        appName = appNameStr.c_str();
         wxLogMessage(wxT("----- Classes in %s -----"), appName);
     }
   }
@@ -797,7 +800,7 @@ int wxDebugContext::Check(bool checkAll)
 {
   int nFailures = 0;
 
-  wxMemStruct *from = (checkPoint ? checkPoint->m_next : (wxMemStruct*)NULL );
+  wxMemStruct *from = (checkPoint ? checkPoint->m_next : NULL );
   if (!from || checkAll)
     from = wxDebugContext::GetHead ();
 
@@ -858,6 +861,11 @@ void wxDebugContext::OutputDumpLine(const wxChar *szFormat, ...)
     dbgout.Printf(buf);
 }
 
+void wxDebugContext::SetShutdownNotifyFunction(wxShutdownNotifyFunction shutdownFn)
+{
+    sm_shutdownFn = shutdownFn;
+}
+
 
 #if USE_THREADSAFE_MEMORY_ALLOCATION
 static bool memSectionOk = false;
@@ -1129,6 +1137,22 @@ void wxTraceLevel(int, const wxChar * ...)
 // All global variables are initialized to 0 at the very beginning, and this is just fine.
 int wxDebugContextDumpDelayCounter::sm_count;
 
+wxDebugContextDumpDelayCounter::wxDebugContextDumpDelayCounter()
+{
+    sm_count++;
+}
+
+wxDebugContextDumpDelayCounter::~wxDebugContextDumpDelayCounter()
+{
+    if ( !--sm_count )
+    {
+        // Notify app if we've been asked to do that
+        if( wxDebugContext::sm_shutdownFn )
+            wxDebugContext::sm_shutdownFn();
+        DoDump();
+    }
+}
+
 void wxDebugContextDumpDelayCounter::DoDump()
 {
     if (wxDebugContext::CountObjectsLeft(true) > 0)