X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b5c702530ee772946d878a15c63ae264299bb6eb..8868ab33139845e438a4493ddee209e5849481b4:/src/common/memory.cpp?ds=sidebyside diff --git a/src/common/memory.cpp b/src/common/memory.cpp index bfd1e61d41..7509750cd3 100644 --- a/src/common/memory.cpp +++ b/src/common/memory.cpp @@ -5,8 +5,8 @@ // Modified by: // Created: 04/01/98 // RCS-ID: $Id$ -// Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows license +// Copyright: (c) Julian Smart +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ @@ -33,6 +33,7 @@ #ifndef WX_PRECOMP #include "wx/utils.h" #include "wx/app.h" +#include "wx/hash.h" #endif #if wxUSE_THREADS @@ -44,15 +45,6 @@ #include "wx/ioswrap.h" -// Obsolete -#if 0 -#if wxUSE_IOSTREAMH - #include -#else - #include -#endif -#endif - #if !defined(__WATCOMC__) && !(defined(__VMS__) && ( __VMS_VER < 70000000 ) )\ && !defined( __MWERKS__ ) && !defined(__SALFORDC__) #include @@ -76,6 +68,13 @@ #include "wx/memory.h" +#if wxUSE_THREADS && defined(__WXDEBUG__) && !defined(__WXMAC__) +#define USE_THREADSAFE_MEMORY_ALLOCATION 1 +#else +#define USE_THREADSAFE_MEMORY_ALLOCATION 0 +#endif + + #ifdef new #undef new #endif @@ -351,7 +350,7 @@ void wxMemStruct::PrintNode () } else { - wxString msg(""); + wxString msg(wxT("")); if (m_fileName) msg.Printf(wxT("%s(%d): "), m_fileName, (int)m_lineNum); @@ -389,7 +388,7 @@ void wxMemStruct::Dump () else msg += wxT("unknown object class"); - wxString msg2(""); + wxString msg2(wxT("")); msg2.Printf(wxT(" at $%lX, size %d"), (long)GetActualData(), (int)RequestSize()); msg += msg2; @@ -401,7 +400,7 @@ void wxMemStruct::Dump () if (m_fileName) msg.Printf(wxT("%s(%d): "), m_fileName, (int)m_lineNum); - wxString msg2(""); + wxString msg2(wxT("")); msg2.Printf(wxT("non-object data at $%lX, size %d"), (long)GetActualData(), (int)RequestSize() ); msg += msg2; wxLogMessage(msg); @@ -609,7 +608,7 @@ bool wxDebugContext::Dump(void) #ifdef __WXDEBUG__ { wxChar* appName = (wxChar*) wxT("application"); - wxString appNameStr(""); + wxString appNameStr(wxT("")); if (wxTheApp) { appNameStr = wxTheApp->GetAppName(); @@ -621,7 +620,7 @@ bool wxDebugContext::Dump(void) wxLogMessage( wxT("----- Memory dump -----") ); } } - + TraverseList ((PmSFV)&wxMemStruct::Dump, (checkPoint ? checkPoint->m_next : (wxMemStruct*)NULL)); wxLogMessage( wxT("") ); @@ -776,7 +775,7 @@ bool wxDebugContext::PrintClasses(void) node = wxClassInfo::sm_classTable->Next(); while (node) { - info = (wxClassInfo *)node->Data(); + info = (wxClassInfo *)node->GetData(); if (info->GetClassName()) { wxString msg(info->GetClassName()); @@ -859,14 +858,14 @@ int wxDebugContext::CountObjectsLeft(bool sinceCheckpoint) return n ; } -#if wxUSE_THREADS -static bool memSectionOk = false; +#if USE_THREADSAFE_MEMORY_ALLOCATION +static bool memSectionOk = FALSE; class MemoryCriticalSection : public wxCriticalSection { public: MemoryCriticalSection() { - memSectionOk = true; + memSectionOk = TRUE; } }; @@ -876,12 +875,12 @@ public: inline MemoryCriticalSectionLocker(wxCriticalSection& critsect) : m_critsect(critsect), m_locked(memSectionOk) { if(m_locked) m_critsect.Enter(); } inline ~MemoryCriticalSectionLocker() { if(m_locked) m_critsect.Leave(); } - + private: // no assignment operator nor copy ctor MemoryCriticalSectionLocker(const MemoryCriticalSectionLocker&); MemoryCriticalSectionLocker& operator=(const MemoryCriticalSectionLocker&); - + wxCriticalSection& m_critsect; bool m_locked; }; @@ -892,10 +891,10 @@ static MemoryCriticalSection memLocker; // TODO: store whether this is a vector or not. void * wxDebugAlloc(size_t size, wxChar * fileName, int lineNum, bool isObject, bool WXUNUSED(isVect) ) { -#if wxUSE_THREADS +#if USE_THREADSAFE_MEMORY_ALLOCATION MemoryCriticalSectionLocker lock(memLocker); #endif - + // If not in debugging allocation mode, do the normal thing // so we don't leave any trace of ourselves in the node list. @@ -952,10 +951,10 @@ void * wxDebugAlloc(size_t size, wxChar * fileName, int lineNum, bool isObject, // TODO: check whether was allocated as a vector void wxDebugFree(void * buf, bool WXUNUSED(isVect) ) { -#if wxUSE_THREADS +#if USE_THREADSAFE_MEMORY_ALLOCATION MemoryCriticalSectionLocker lock(memLocker); #endif - + if (!buf) return;