Create SkGlyphCache globals with SkOnce.
VC++ will have magic statics with VS2014, but does not currently have them.
The thread unsafe implementation was causing the DirectWrite bots to randomly
crash when running multi-threaded tests, as gGlobals could be seen as NULL.
R=mtklein@google.com
Review URL: https://codereview.chromium.org/252713002
git-svn-id: http://skia.googlecode.com/svn/trunk@14397 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/core/SkGlyphCache.cpp b/src/core/SkGlyphCache.cpp
index 7b57e2f..c3611ea 100755
--- a/src/core/SkGlyphCache.cpp
+++ b/src/core/SkGlyphCache.cpp
@@ -22,11 +22,17 @@
bool gSkSuppressFontCachePurgeSpew;
+static void create_globals(SkGlyphCache_Globals** globals) {
+ *globals = SkNEW_ARGS(SkGlyphCache_Globals, (SkGlyphCache_Globals::kYes_UseMutex));
+}
+
// Returns the shared globals
static SkGlyphCache_Globals& getSharedGlobals() {
// we leak this, so we don't incur any shutdown cost of the destructor
- static SkGlyphCache_Globals* gGlobals = SkNEW_ARGS(SkGlyphCache_Globals,
- (SkGlyphCache_Globals::kYes_UseMutex));
+ static SkGlyphCache_Globals* gGlobals = NULL;
+ SK_DECLARE_STATIC_ONCE(once);
+ SkOnce(&once, create_globals, &gGlobals);
+ SkASSERT(NULL != gGlobals);
return *gGlobals;
}