1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file. 4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "crypto/mac_security_services_lock.h" 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/singleton.h" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/synchronization/lock.h" 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace { 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// This singleton pertains to Apple's wrappers over their own CSSM handles, 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// as opposed to our own CSSM_CSP_HANDLE in cssm_init.cc. 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass SecurityServicesSingleton { 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static SecurityServicesSingleton* GetInstance() { 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return Singleton<SecurityServicesSingleton, 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen LeakySingletonTraits<SecurityServicesSingleton> >::get(); 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen } 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen base::Lock& lock() { return lock_; } 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen friend struct DefaultSingletonTraits<SecurityServicesSingleton>; 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen SecurityServicesSingleton() {} 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ~SecurityServicesSingleton() {} 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen base::Lock lock_; 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(SecurityServicesSingleton); 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace crypto { 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenbase::Lock& GetMacSecurityServicesLock() { 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen return SecurityServicesSingleton::GetInstance()->lock(); 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} // namespace crypto 43