X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ee4f8c2af9c6c5458e488db10aef7d00a89ace25..6a6c0a8bdadc52e87e6d1e315d1bf6f192880bd0:/src/gtk1/threadno.cpp diff --git a/src/gtk1/threadno.cpp b/src/gtk1/threadno.cpp index 9b1686c349..deccf57775 100644 --- a/src/gtk1/threadno.cpp +++ b/src/gtk1/threadno.cpp @@ -13,32 +13,39 @@ #endif #include "wx/wx.h" +#include "wx/thread.h" wxMutex::wxMutex() { - m_locked = FALSE; + m_locked = 0; } wxMutex::~wxMutex() { + if (m_locked) + wxDebugMsg("wxMutex warning: destroying a locked mutex (%d locks)\n", m_locked); } MutexError wxMutex::Lock() { - m_locked = TRUE; - return NO_ERROR; + m_locked++; + return MUTEX_NO_ERROR; } MutexError wxMutex::TryLock() { - m_locked = TRUE; - return NO_ERROR; + if (m_locked > 0) + return MUTEX_BUSY; + m_locked++; + return MUTEX_NO_ERROR; } MutexError wxMutex::Unlock() { - m_locked = FALSE; - return NO_ERROR; + if (m_locked == 0) + return MUTEX_UNLOCKED; + m_locked--; + return MUTEX_NO_ERROR; } wxCondition::wxCondition() @@ -76,12 +83,12 @@ ThreadError wxThread::Create() { p_internal->exit_status = Entry(); OnExit(); - return NO_ERROR; + return THREAD_NO_ERROR; } ThreadError wxThread::Destroy() { - return RUNNING; + return THREAD_RUNNING; } void wxThread::DeferDestroy() @@ -135,22 +142,23 @@ void wxThread::OnExit() Join(); } -// Global initialization -static void wxThreadInit(void *WXUNUSED(client)) -{ + +// Automatic initialization +class wxThreadModule : public wxModule { + DECLARE_DYNAMIC_CLASS(wxThreadModule) +public: + bool OnInit(); + void OnExit(); +}; + +bool wxThreadModule::OnInit() { wxMainMutex.Lock(); + return TRUE; } -// Global cleanup -static void wxThreadExit(void *WXUNUSED(client)) +void wxThreadModule::wxThreadExit() { wxMainMutex.Unlock(); } -// Let automatic initialization be performed from wxCommonInit(). -static struct -wxThreadGlobal { - wxThreadGlobal() { - wxRegisterModuleFunction(wxThreadInit, wxThreadExit, NULL); - } -} dummy; +IMPLEMENT_DYNAMIC_CLASS(wxThreadModule, wxModule)