Home | History | Annotate | Download | only in base
      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 
     11 using base::Lock;
     12 using base::AutoLock;
     13 
     14 namespace net {
     15 
     16 class 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 
     46 base::LazyInstance<LibHolder> g_holder(base::LINKER_INITIALIZED);
     47 
     48 // static
     49 void AndroidNetworkLibrary::RegisterSharedInstance(AndroidNetworkLibrary* lib) {
     50   g_holder.Get().Register(lib);
     51 }
     52 
     53 // static
     54 void AndroidNetworkLibrary::UnregisterSharedInstance() {
     55   g_holder.Get().Reset();
     56 }
     57 
     58 // static
     59 AndroidNetworkLibrary* AndroidNetworkLibrary::GetSharedInstance() {
     60   return g_holder.Get().GetLibrary();
     61 }
     62 
     63 AndroidNetworkLibrary::AndroidNetworkLibrary() {
     64 }
     65 
     66 AndroidNetworkLibrary::~AndroidNetworkLibrary() {
     67 }
     68 
     69 }  // namespace net
     70