diff options
author | 2014-07-01 06:26:48 -0700 | |
---|---|---|
committer | 2014-07-01 06:26:48 -0700 | |
commit | cad0cb2a2dd23ceee03f24954c491344aef18c2c (patch) | |
tree | f0ee1504b9c7cf4f76b76fc01293a4012b10bad9 /src/ports | |
parent | 4a2489f7bbaccfe588597193561526d579004653 (diff) |
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
Diffstat (limited to 'src/ports')
-rw-r--r-- | src/ports/SkMutex_win.h | 21 |
1 files 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 |