diff options
author | apatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-06 23:14:47 +0000 |
---|---|---|
committer | apatrick@chromium.org <apatrick@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-06 23:14:47 +0000 |
commit | 762de919a02b352bc684b3a49175d6aa5234b0c1 (patch) | |
tree | b02d9c4a95f97add41cfc2d537a43680934ee6b6 /base/at_exit.cc | |
parent | d3a250fc8802f10bc22d9f04475867821fa45f57 (diff) | |
download | chromium_src-762de919a02b352bc684b3a49175d6aa5234b0c1.zip chromium_src-762de919a02b352bc684b3a49175d6aa5234b0c1.tar.gz chromium_src-762de919a02b352bc684b3a49175d6aa5234b0c1.tar.bz2 |
Support for registering arbitrary Tasks with AtExitManager.
Previously it was limitted to functions taling a single void* argument.
Review URL: http://codereview.chromium.org/7831021
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@99856 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/at_exit.cc')
-rw-r--r-- | base/at_exit.cc | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/base/at_exit.cc b/base/at_exit.cc index c7daad4..38e8bbe 100644 --- a/base/at_exit.cc +++ b/base/at_exit.cc @@ -7,7 +7,9 @@ #include <stddef.h> #include <ostream> +#include "base/bind.h" #include "base/logging.h" +#include "base/task.h" namespace base { @@ -41,15 +43,19 @@ AtExitManager::~AtExitManager() { // static void AtExitManager::RegisterCallback(AtExitCallbackType func, void* param) { + DCHECK(func); + RegisterTask(base::Bind(func, param)); +} + +// static +void AtExitManager::RegisterTask(base::Closure task) { if (!g_top_manager) { NOTREACHED() << "Tried to RegisterCallback without an AtExitManager"; return; } - DCHECK(func); - AutoLock lock(g_top_manager->lock_); - g_top_manager->stack_.push(CallbackAndParam(func, param)); + g_top_manager->stack_.push(task); } // static @@ -62,10 +68,9 @@ void AtExitManager::ProcessCallbacksNow() { AutoLock lock(g_top_manager->lock_); while (!g_top_manager->stack_.empty()) { - CallbackAndParam callback_and_param = g_top_manager->stack_.top(); + base::Closure task = g_top_manager->stack_.top(); + task.Run(); g_top_manager->stack_.pop(); - - callback_and_param.func_(callback_and_param.param_); } } |