LCOV - code coverage report
Current view: directory - ipc/chromium/src/base - lazy_instance.cc (source / functions) Found Hit Coverage
Test: app.info Lines: 9 7 77.8 %
Date: 2012-06-02 Functions: 1 1 100.0 %

       1                 : // Copyright (c) 2008 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 "base/lazy_instance.h"
       6                 : 
       7                 : #include "base/at_exit.h"
       8                 : #include "base/atomicops.h"
       9                 : #include "base/basictypes.h"
      10                 : #include "base/platform_thread.h"
      11                 : 
      12                 : namespace base {
      13                 : 
      14            4260 : void LazyInstanceHelper::EnsureInstance(void* instance,
      15                 :                                         void (*ctor)(void*),
      16                 :                                         void (*dtor)(void*)) {
      17                 :   // Try to create the instance, if we're the first, will go from EMPTY
      18                 :   // to CREATING, otherwise we've already been beaten here.
      19            4260 :   if (base::subtle::Acquire_CompareAndSwap(
      20            4260 :           &state_, STATE_EMPTY, STATE_CREATING) == STATE_EMPTY) {
      21                 :     // Created the instance in the space provided by |instance|.
      22            4260 :     ctor(instance);
      23                 :     // Instance is created, go from CREATING to CREATED.
      24            4260 :     base::subtle::Release_Store(&state_, STATE_CREATED);
      25                 :     // Register the destructor callback with AtExitManager.
      26            4260 :     base::AtExitManager::RegisterCallback(dtor, instance);
      27                 :   } else {
      28                 :     // It's either in the process of being created, or already created.  Spin.
      29               0 :     while (base::subtle::NoBarrier_Load(&state_) != STATE_CREATED)
      30               0 :       PlatformThread::YieldCurrentThread();
      31                 :   }
      32            4260 : }
      33                 : 
      34                 : }  // namespace base

Generated by: LCOV version 1.7