LCOV - app.info - ipc/chromium/src/base/at_exit.h

LCOV - code coverage report
| Current view: | directory - ipc/chromium/src/base - at_exit.h (source / functions) |  | Found | Hit | Coverage |
| Test: | app.info | Lines: | 3 | 3 | 100.0 %
| Date: | 2012-07-07 | Functions: | 2 | 2 | 100.0 %

           1                 : // Copyright (c) 2006-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                 : #ifndef BASE_AT_EXIT_H_
           6                 : #define BASE_AT_EXIT_H_
           7                 :
           8                 : #include <stack>
           9                 :
          10                 : #include "base/basictypes.h"
          11                 : #include "base/lock.h"
          12                 :
          13                 : namespace base {
          14                 :
          15                 : // This class provides a facility similar to the CRT atexit(), except that
          16                 : // we control when the callbacks are executed. Under Windows for a DLL they
          17                 : // happen at a really bad time and under the loader lock. This facility is
          18                 : // mostly used by base::Singleton.
          19                 : //
          20                 : // The usage is simple. Early in the main() or WinMain() scope create an
          21                 : // AtExitManager object on the stack:
          22                 : // int main(...) {
          23                 : //    base::AtExitManager exit_manager;
          24                 : //
          25                 : // }
          26                 : // When the exit_manager object goes out of scope, all the registered
          27                 : // callbacks and singleton destructors will be called.
          28                 :
          29                 : class AtExitManager {
          30                 :  protected:
          31                 :   // This constructor will allow this instance of AtExitManager to be created
          32                 :   // even if one already exists.  This should only be used for testing!
          33                 :   // AtExitManagers are kept on a global stack, and it will be removed during
          34                 :   // destruction.  This allows you to shadow another AtExitManager.
          35                 :   AtExitManager(bool shadow);
          36                 :
          37                 :  public:
          38                 :   typedef void (*AtExitCallbackType)(void*);
          39                 :
          40                 :   AtExitManager();
          41                 :
          42                 :   // The dtor calls all the registered callbacks. Do not try to register more
          43                 :   // callbacks after this point.
          44                 :   ~AtExitManager();
          45                 :
          46                 :   // Registers the specified function to be called at exit. The prototype of
          47                 :   // the callback function is void func().
          48                 :   static void RegisterCallback(AtExitCallbackType func, void* param);
          49                 :
          50                 :   // Calls the functions registered with RegisterCallback in LIFO order. It
          51                 :   // is possible to register new callbacks after calling this function.
          52                 :   static void ProcessCallbacksNow();
          53                 :
          54                 :   static bool AlreadyRegistered();
          55                 :
          56                 :  private:
          57            4257 :   struct CallbackAndParam {
          58            4262 :     CallbackAndParam(AtExitCallbackType func, void* param)
          59            4262 :         : func_(func), param_(param) { }
          60                 :     AtExitCallbackType func_;
          61                 :     void* param_;
          62                 :   };
          63                 :
          64                 :   Lock lock_;
          65                 :   std::stack<CallbackAndParam> stack_;
          66                 :   AtExitManager* next_manager_;  // Stack of managers to allow shadowing.
          67                 :
          68                 :   DISALLOW_COPY_AND_ASSIGN(AtExitManager);
          69                 : };
          70                 :
          71                 : }  // namespace base
          72                 :
          73                 : #endif  // BASE_AT_EXIT_H_

Generated by: LCOV version 1.7