Index: base/task.cc |
diff --git a/base/task.cc b/base/task.cc |
index e4da5474a0098d852963c1ca5c1b350ffa306d37..8c614734863fb5c8e34959dd2b00b4ac8c80e538 100644 |
--- a/base/task.cc |
+++ b/base/task.cc |
@@ -34,4 +34,33 @@ Task* ScopedTaskRunner::Release() { |
return tmp; |
} |
+namespace subtle { |
+ |
+TaskClosureAdapter::TaskClosureAdapter(Task* task) |
+ : task_(task), |
+ should_leak_task_(&kTaskLeakingDefault) { |
+} |
+ |
+TaskClosureAdapter::TaskClosureAdapter(Task* task, bool* should_leak_task) |
+ : task_(task), |
+ should_leak_task_(should_leak_task) { |
+} |
+ |
+TaskClosureAdapter::~TaskClosureAdapter() { |
+ if (!*should_leak_task_) { |
+ delete task_; |
+ } |
+} |
+ |
+void TaskClosureAdapter::Run() { |
+ task_->Run(); |
+ delete task_; |
+ task_ = NULL; |
+} |
+ |
+// Don't leak tasks by default. |
+bool TaskClosureAdapter::kTaskLeakingDefault = false; |
+ |
+} // namespace subtle |
+ |
} // namespace base |