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