1// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "net/base/android_network_library.h"
6
7#include "base/lazy_instance.h"
8#include "base/logging.h"
9#include "base/synchronization/lock.h"
10
11using base::Lock;
12using base::AutoLock;
13
14namespace net {
15
16class LibHolder {
17 public:
18  LibHolder() : lib_(NULL) {}
19  ~LibHolder() {
20    Reset();
21  }
22  void Register(AndroidNetworkLibrary* lib) {
23    AutoLock lock(lock_);
24    if (lib_) {
25      LOG(WARNING) << "Ignoring duplicate call " << lib;
26      delete lib;
27      return;
28    }
29    lib_ = lib;
30  }
31  void Reset() {
32    AutoLock lock(lock_);
33    delete lib_;
34    lib_ = NULL;
35  }
36  AndroidNetworkLibrary* GetLibrary() {
37    AutoLock lock(lock_);
38    return lib_;
39  }
40
41 private:
42  AndroidNetworkLibrary* lib_;
43  Lock lock_;
44};
45
46base::LazyInstance<LibHolder> g_holder(base::LINKER_INITIALIZED);
47
48// static
49void AndroidNetworkLibrary::RegisterSharedInstance(AndroidNetworkLibrary* lib) {
50  g_holder.Get().Register(lib);
51}
52
53// static
54void AndroidNetworkLibrary::UnregisterSharedInstance() {
55  g_holder.Get().Reset();
56}
57
58// static
59AndroidNetworkLibrary* AndroidNetworkLibrary::GetSharedInstance() {
60  return g_holder.Get().GetLibrary();
61}
62
63AndroidNetworkLibrary::AndroidNetworkLibrary() {
64}
65
66AndroidNetworkLibrary::~AndroidNetworkLibrary() {
67}
68
69}  // namespace net
70