From cad0cb2a2dd23ceee03f24954c491344aef18c2c Mon Sep 17 00:00:00 2001 From: tomhudson Date: Tue, 1 Jul 2014 06:26:48 -0700 Subject: [PATCH] Grant independence to SkBaseMutex on Windows. Under POSIX, class SkMutex inherits from struct SkBaseMutex. Since we can't have a POD mutex on Windows, we used to just typedef SkMutex SkBaseMutex there. However, that makes it impossible to forward-declare SkBaseMutex consistently across platforms. With this CL we declare an empty struct SkBaseMutex on Windows, which should have 0 cost but make the compiler happy. R=bungeman@google.com, mtklein@google.com, tomhudson@google.com, bungeman, mtklein BUG=skia: Author: tomhudson@chromium.org Review URL: https://codereview.chromium.org/364473002 --- src/ports/SkMutex_win.h | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/ports/SkMutex_win.h b/src/ports/SkMutex_win.h index d12fd033f3..d84b0e42fd 100644 --- a/src/ports/SkMutex_win.h +++ b/src/ports/SkMutex_win.h @@ -31,15 +31,17 @@ #endif // On Windows, SkBaseMutex and SkMutex are the same thing, -// we can't easily get rid of static initializers. -class SkMutex { +// we can't easily get rid of static initializers. However, +// we preserve the same inheritance pattern as other platforms +// so that we can forward-declare cleanly. +struct SkBaseMutex { public: - SkMutex() { + SkBaseMutex() { InitializeCriticalSection(&fStorage); SkDEBUGCODE(fOwner = 0;) } - ~SkMutex() { + ~SkBaseMutex() { SkASSERT(0 == fOwner); DeleteCriticalSection(&fStorage); } @@ -59,15 +61,16 @@ public: SkASSERT(GetCurrentThreadId() == fOwner); } -private: - SkMutex(const SkMutex&); - SkMutex& operator=(const SkMutex&); - +protected: CRITICAL_SECTION fStorage; SkDEBUGCODE(DWORD fOwner;) + +private: + SkBaseMutex(const SkBaseMutex&); + SkBaseMutex& operator=(const SkBaseMutex&); }; -typedef SkMutex SkBaseMutex; +class SkMutex : public SkBaseMutex { }; // Windows currently provides no documented means of POD initializing a CRITICAL_SECTION. #define SK_DECLARE_STATIC_MUTEX(name) static SkBaseMutex name