| Index: Source/platform/scheduler/CancellableTaskFactory.h
|
| diff --git a/Source/platform/scheduler/CancellableTaskFactory.h b/Source/platform/scheduler/CancellableTaskFactory.h
|
| index 7e44bcb5ffc50b550e317d9bc521a0540c7d098d..3ba126a70f73f2b3a7963116800cc46baa20e16d 100644
|
| --- a/Source/platform/scheduler/CancellableTaskFactory.h
|
| +++ b/Source/platform/scheduler/CancellableTaskFactory.h
|
| @@ -17,19 +17,28 @@
|
| namespace blink {
|
| class TraceLocation;
|
|
|
| +// NOTE CancellableTaskFactory is NOT threadsafe.
|
| class PLATFORM_EXPORT CancellableTaskFactory {
|
| WTF_MAKE_NONCOPYABLE(CancellableTaskFactory);
|
|
|
| public:
|
| explicit CancellableTaskFactory(PassOwnPtr<Closure> closure)
|
| : m_closure(closure)
|
| - , m_weakPtrFactory(this)
|
| + , m_task(nullptr)
|
| +#if ENABLE(ASSERT)
|
| + , m_thread(currentThread())
|
| +#endif
|
| {
|
| }
|
|
|
| + ~CancellableTaskFactory()
|
| + {
|
| + cancel();
|
| + }
|
| +
|
| bool isPending() const
|
| {
|
| - return m_weakPtrFactory.hasWeakPtrs();
|
| + return m_task;
|
| }
|
|
|
| void cancel();
|
| @@ -41,21 +50,33 @@ public:
|
| private:
|
| class CancellableTask : public WebThread::Task {
|
| WTF_MAKE_NONCOPYABLE(CancellableTask);
|
| + WTF_MAKE_FAST_ALLOCATED;
|
|
|
| public:
|
| - explicit CancellableTask(WeakPtr<CancellableTaskFactory> weakPtr)
|
| - : m_weakPtr(weakPtr) { }
|
| + explicit CancellableTask(CancellableTaskFactory* factory)
|
| + : m_factory(factory)
|
| + {
|
| + }
|
|
|
| virtual ~CancellableTask() { }
|
|
|
| void run() override;
|
|
|
| + void cancel()
|
| + {
|
| + m_factory = nullptr;
|
| + }
|
| +
|
| private:
|
| - WeakPtr<CancellableTaskFactory> m_weakPtr;
|
| + CancellableTaskFactory* m_factory; // NOT OWNED
|
| };
|
|
|
| OwnPtr<Closure> m_closure;
|
| - WeakPtrFactory<CancellableTaskFactory> m_weakPtrFactory;
|
| + CancellableTask* m_task; // NOT OWNED
|
| +
|
| +#if ENABLE(ASSERT)
|
| + ThreadIdentifier m_thread;
|
| +#endif
|
| };
|
|
|
| } // namespace blink
|
|
|