diff options
author | tomhudson <tomhudson@chromium.org> | 2014-07-01 08:06:14 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-07-01 08:06:14 -0700 |
commit | 60b08a0adfe73f593af62c8d3f55958438360e1b (patch) | |
tree | fbd5d0eac47661cf4d4c59566868ff285a7866a5 /src/ports/SkFontConfigInterface_direct.cpp | |
parent | 950f89dd20325bf4dfce588d9f64644040787a06 (diff) |
Fix race condition in parallel font initialization.
Uses a mutex to guard construction of the singleton, which initialies
the non-threadsafe libfontconfig. Without this change, the parallel
path ops test runner crashes 6/10 and hangs 2/10 on startup; with this
change, 0/10 problems.
BUG=skia:2693
R=mtklein@google.com, bungeman@google.com, reed@google.com, tomhudson@google.com
Committed: https://skia.googlesource.com/skia/+/df022f5972ae6a2a1d96d15c50eca52cade3abd8
Author: tomhudson@chromium.org
Review URL: https://codereview.chromium.org/355573006
Diffstat (limited to 'src/ports/SkFontConfigInterface_direct.cpp')
-rw-r--r-- | src/ports/SkFontConfigInterface_direct.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/ports/SkFontConfigInterface_direct.cpp b/src/ports/SkFontConfigInterface_direct.cpp index dc9afbae1f..c0cfd8fdcf 100644 --- a/src/ports/SkFontConfigInterface_direct.cpp +++ b/src/ports/SkFontConfigInterface_direct.cpp @@ -124,9 +124,13 @@ private: SkMutex mutex_; }; -SkFontConfigInterface* SkFontConfigInterface::GetSingletonDirectInterface() { - SK_DECLARE_STATIC_LAZY_PTR(SkFontConfigInterfaceDirect, direct); - return direct.get(); +SkFontConfigInterface* SkFontConfigInterface::GetSingletonDirectInterface(SkBaseMutex* mutex) { + SkAutoMutexAcquire ac(mutex); + static SkFontConfigInterfaceDirect* singleton = NULL; + if (singleton == NULL) { + singleton = SkNEW(SkFontConfigInterfaceDirect); + } + return singleton; } /////////////////////////////////////////////////////////////////////////////// |