| Index: Source/platform/scheduler/CancellableTaskFactory.cpp
|
| diff --git a/Source/platform/scheduler/CancellableTaskFactory.cpp b/Source/platform/scheduler/CancellableTaskFactory.cpp
|
| index a7c81e39de2b542e0b56b3c5d03e3bdbad38f44a..4efe10f8bdf4d0025e086324e205be55d3b0efbf 100644
|
| --- a/Source/platform/scheduler/CancellableTaskFactory.cpp
|
| +++ b/Source/platform/scheduler/CancellableTaskFactory.cpp
|
| @@ -5,28 +5,34 @@
|
| #include "config.h"
|
| #include "platform/scheduler/CancellableTaskFactory.h"
|
|
|
| -#include "public/platform/Platform.h"
|
| -#include "wtf/InstanceCounter.h"
|
| -
|
| namespace blink {
|
|
|
| void CancellableTaskFactory::cancel()
|
| {
|
| - m_weakPtrFactory.revokeAll();
|
| + ASSERT(m_thread == currentThread());
|
| +
|
| + if (m_task) {
|
| + m_task->cancel();
|
| + m_task = nullptr;
|
| + }
|
| }
|
|
|
| WebThread::Task* CancellableTaskFactory::task()
|
| {
|
| + ASSERT(m_thread == currentThread());
|
| +
|
| cancel();
|
| - return new CancellableTask(m_weakPtrFactory.createWeakPtr());
|
| + m_task = new CancellableTask(this);
|
| + return m_task;
|
| }
|
|
|
| void CancellableTaskFactory::CancellableTask::run()
|
| {
|
| - if (m_weakPtr.get()) {
|
| - Closure* closure = m_weakPtr->m_closure.get();
|
| - m_weakPtr->m_weakPtrFactory.revokeAll();
|
| - (*closure)();
|
| + if (m_factory) {
|
| + ASSERT(m_factory->m_thread == currentThread());
|
| + m_factory->m_task = nullptr;
|
| + (*m_factory->m_closure)();
|
| + m_factory = nullptr;
|
| }
|
| }
|
|
|
|
|