Revert 54584 - Delete tasks unconditionally in MessageLoop::DeletePendingTasks().

BUG=6532
TEST=existing unit tests

Review URL: http://codereview.chromium.org/3076015

TBR=akalin@chromium.org
Review URL: http://codereview.chromium.org/2878074

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@54697 0039d316-1c4b-4281-b951-d872f2087c98


CrOS-Libchrome-Original-Commit: 24db026c5f670bd4482025fba34848ee69eb614f
diff --git a/base/message_loop.cc b/base/message_loop.cc
index d67e64a..1d86f79 100644
--- a/base/message_loop.cc
+++ b/base/message_loop.cc
@@ -466,18 +466,37 @@
       // tasks.
       AddToDelayedWorkQueue(pending_task);
     } else {
+      // TODO(darin): Delete all tasks once it is safe to do so.
+      // Until it is totally safe, just do it when running Purify or
+      // Valgrind.
+#if defined(PURIFY)
       delete pending_task.task;
+#elif defined(OS_POSIX)
+      if (RUNNING_ON_VALGRIND)
+        delete pending_task.task;
+#endif  // defined(OS_POSIX)
     }
   }
   did_work |= !deferred_non_nestable_work_queue_.empty();
   while (!deferred_non_nestable_work_queue_.empty()) {
-    delete deferred_non_nestable_work_queue_.front().task;
+    // TODO(darin): Delete all tasks once it is safe to do so.
+    // Until it is totaly safe, only delete them under Purify and Valgrind.
+    Task* task = NULL;
+#if defined(PURIFY)
+    task = deferred_non_nestable_work_queue_.front().task;
+#elif defined(OS_POSIX)
+    if (RUNNING_ON_VALGRIND)
+      task = deferred_non_nestable_work_queue_.front().task;
+#endif
     deferred_non_nestable_work_queue_.pop();
+    if (task)
+      delete task;
   }
   did_work |= !delayed_work_queue_.empty();
   while (!delayed_work_queue_.empty()) {
-    delete delayed_work_queue_.top().task;
+    Task* task = delayed_work_queue_.top().task;
     delayed_work_queue_.pop();
+    delete task;
   }
   return did_work;
 }