// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "net/base/android_network_library.h" #include "base/lazy_instance.h" #include "base/logging.h" #include "base/synchronization/lock.h" using base::Lock; using base::AutoLock; namespace net { class LibHolder { public: LibHolder() : lib_(NULL) {} ~LibHolder() { Reset(); } void Register(AndroidNetworkLibrary* lib) { AutoLock lock(lock_); if (lib_) { LOG(WARNING) << "Ignoring duplicate call " << lib; delete lib; return; } lib_ = lib; } void Reset() { AutoLock lock(lock_); delete lib_; lib_ = NULL; } AndroidNetworkLibrary* GetLibrary() { AutoLock lock(lock_); return lib_; } private: AndroidNetworkLibrary* lib_; Lock lock_; }; base::LazyInstance<LibHolder> g_holder(base::LINKER_INITIALIZED); // static void AndroidNetworkLibrary::RegisterSharedInstance(AndroidNetworkLibrary* lib) { g_holder.Get().Register(lib); } // static void AndroidNetworkLibrary::UnregisterSharedInstance() { g_holder.Get().Reset(); } // static AndroidNetworkLibrary* AndroidNetworkLibrary::GetSharedInstance() { return g_holder.Get().GetLibrary(); } AndroidNetworkLibrary::AndroidNetworkLibrary() { } AndroidNetworkLibrary::~AndroidNetworkLibrary() { } } // namespace net