diff options
author | davidben@chromium.org <davidben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-07 17:36:44 +0000 |
---|---|---|
committer | davidben@chromium.org <davidben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-07 17:36:44 +0000 |
commit | d017adbbbfcedc1d927aa0737476ed3c601446bb (patch) | |
tree | 88bd0be803234a6f3f3f81e8d5899d2124cfc0c5 /base/crypto/cssm_init.cc | |
parent | 5f7145d2eadcbb5faa3210d5e346018d0be6ffb6 (diff) | |
download | chromium_src-d017adbbbfcedc1d927aa0737476ed3c601446bb.zip chromium_src-d017adbbbfcedc1d927aa0737476ed3c601446bb.tar.gz chromium_src-d017adbbbfcedc1d927aa0737476ed3c601446bb.tar.bz2 |
Add a lock for OS X CSSM wrapper APIs
They're apparently problematic with threads.
R=agl
BUG=48006
TEST=KeygenHandler.ConcurrencyTest
Review URL: http://codereview.chromium.org/2832047
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@51734 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/crypto/cssm_init.cc')
-rw-r--r-- | base/crypto/cssm_init.cc | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/base/crypto/cssm_init.cc b/base/crypto/cssm_init.cc index 510ae0c..b04cbe7 100644 --- a/base/crypto/cssm_init.cc +++ b/base/crypto/cssm_init.cc @@ -6,6 +6,7 @@ #include <Security/SecBase.h> +#include "base/lock.h" #include "base/logging.h" #include "base/singleton.h" #include "base/sys_string_conversions.h" @@ -75,6 +76,25 @@ class CSSMInitSingleton { CSSM_CSP_HANDLE csp_handle_; }; +// This singleton is separate as it pertains to Apple's wrappers over +// their own CSSM handles, as opposed to our own CSSM_CSP_HANDLE. +class SecurityServicesSingleton { + public: + ~SecurityServicesSingleton() {} + + Lock& lock() { return lock_; } + + private: + friend class Singleton<SecurityServicesSingleton>; + friend struct DefaultSingletonTraits<SecurityServicesSingleton>; + + SecurityServicesSingleton() {} + + Lock lock_; + + DISALLOW_COPY_AND_ASSIGN(SecurityServicesSingleton); +}; + } // namespace namespace base { @@ -124,4 +144,8 @@ void LogCSSMError(const char *fn_name, CSSM_RETURN err) { } } +Lock& GetMacSecurityServicesLock() { + return Singleton<SecurityServicesSingleton>::get()->lock(); +} + } // namespace base |