Index: base/at_exit.cc |
=================================================================== |
--- base/at_exit.cc (revision 99168) |
+++ base/at_exit.cc (working copy) |
@@ -8,6 +8,7 @@ |
#include <ostream> |
#include "base/logging.h" |
+#include "base/task.h" |
namespace base { |
@@ -41,15 +42,21 @@ |
// static |
void AtExitManager::RegisterCallback(AtExitCallbackType func, void* param) { |
+ DCHECK(func); |
+ RegisterTask(NewRunnableFunction(func, param)); |
+} |
+ |
+// static |
+void AtExitManager::RegisterTask(Task* task) { |
if (!g_top_manager) { |
NOTREACHED() << "Tried to RegisterCallback without an AtExitManager"; |
return; |
} |
- DCHECK(func); |
+ DCHECK(task); |
AutoLock lock(g_top_manager->lock_); |
- g_top_manager->stack_.push(CallbackAndParam(func, param)); |
+ g_top_manager->stack_.push(linked_ptr<Task>(task)); |
} |
// static |
@@ -62,10 +69,9 @@ |
AutoLock lock(g_top_manager->lock_); |
while (!g_top_manager->stack_.empty()) { |
- CallbackAndParam callback_and_param = g_top_manager->stack_.top(); |
+ Task* task = g_top_manager->stack_.top().get(); |
+ task->Run(); |
g_top_manager->stack_.pop(); |
- |
- callback_and_param.func_(callback_and_param.param_); |
} |
} |