1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- #ifndef BASE_AT_EXIT_H_
- #define BASE_AT_EXIT_H_
- #include "base/base_export.h"
- #include "base/callback.h"
- #include "base/containers/stack.h"
- #include "base/synchronization/lock.h"
- #include "base/thread_annotations.h"
- namespace base {
- class BASE_EXPORT AtExitManager {
- public:
- typedef void (*AtExitCallbackType)(void*);
- AtExitManager();
- AtExitManager(const AtExitManager&) = delete;
- AtExitManager& operator=(const AtExitManager&) = delete;
-
-
- ~AtExitManager();
-
-
- static void RegisterCallback(AtExitCallbackType func, void* param);
-
- static void RegisterTask(base::OnceClosure task);
-
-
- static void ProcessCallbacksNow();
-
-
- static void DisableAllAtExitManagers();
- protected:
-
-
-
-
- explicit AtExitManager(bool shadow);
- private:
- base::Lock lock_;
- base::stack<base::OnceClosure> stack_ GUARDED_BY(lock_);
- #if DCHECK_IS_ON()
- bool processing_callbacks_ GUARDED_BY(lock_) = false;
- #endif
-
- AtExitManager* const next_manager_;
- };
- #if defined(UNIT_TEST)
- class ShadowingAtExitManager : public AtExitManager {
- public:
- ShadowingAtExitManager() : AtExitManager(true) {}
- };
- #endif
- }
- #endif
|