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