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
This commit is contained in:
parent
4a2489f7bb
commit
cad0cb2a2d
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user