From: Václav Slavík Date: Wed, 4 Sep 2002 22:07:25 +0000 (+0000) Subject: use own mutex for region iterator locking, not gui one X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/2af6b4c37f705e1f06fc47be1c162f4dd4944743?ds=inline use own mutex for region iterator locking, not gui one git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@16980 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/mgl/region.cpp b/src/mgl/region.cpp index 3ec5b7d751..2d80d07aa3 100644 --- a/src/mgl/region.cpp +++ b/src/mgl/region.cpp @@ -21,6 +21,7 @@ #include "wx/region.h" #include "wx/gdicmn.h" #include "wx/thread.h" +#include "wx/module.h" #include @@ -290,6 +291,27 @@ wxRegionContain wxRegion::Contains(const wxRect& rect) const // wxRegionIterator // /////////////////////////////////////////////////////////////////////////////// +#if wxUSE_THREADS +static wxMutex *gs_mutexIterator; + +class wxMglRegionModule : public wxModule +{ +public: + virtual bool OnInit() + { + gs_mutexIterator = new wxMutex(); + return TRUE; + } + virtual void OnExit() + { + wxDELETE(gs_mutexIterator); + } + + DECLARE_DYNAMIC_CLASS(wxMglRegionModule) +}; +IMPLEMENT_DYNAMIC_CLASS(wxMglRegionModule, wxModule) +#endif + /* * Initialize empty iterator */ @@ -331,10 +353,11 @@ void wxRegionIterator::Reset(const wxRegion& region) if (!region.Empty()) { - wxMutexGuiEnter(); +#if wxUSE_THREADS + wxMutexLocker(*gs_mutexIterator); +#endif gs_rectList = &m_rects; M_REGION_OF(region).traverse(wxMGL_region_callback); - wxMutexGuiLeave(); m_currentNode = m_rects.GetFirst(); } }