summaryrefslogtreecommitdiff
path: root/Source/WebCore/storage/SQLCallbackWrapper.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/storage/SQLCallbackWrapper.h')
-rw-r--r--Source/WebCore/storage/SQLCallbackWrapper.h33
1 files changed, 25 insertions, 8 deletions
diff --git a/Source/WebCore/storage/SQLCallbackWrapper.h b/Source/WebCore/storage/SQLCallbackWrapper.h
index 34c708563..3cb0e2dbc 100644
--- a/Source/WebCore/storage/SQLCallbackWrapper.h
+++ b/Source/WebCore/storage/SQLCallbackWrapper.h
@@ -30,7 +30,6 @@
#if ENABLE(SQL_DATABASE)
-#include "CrossThreadTask.h"
#include "ScriptExecutionContext.h"
#include <wtf/ThreadingPrimitives.h>
@@ -74,7 +73,7 @@ public:
context = m_scriptExecutionContext.release().leakRef();
callback = m_callback.release().leakRef();
}
- context->postTask(createCallbackTask(&safeRelease, AllowAccessLater(callback)));
+ context->postTask(SafeReleaseTask::create(callback));
}
PassRefPtr<T> unwrap()
@@ -89,12 +88,30 @@ public:
bool hasCallback() const { return m_callback; }
private:
- static void safeRelease(ScriptExecutionContext* context, T* callback)
- {
- ASSERT(callback && context && context->isContextThread());
- callback->deref();
- context->deref();
- }
+ class SafeReleaseTask : public ScriptExecutionContext::Task {
+ public:
+ static PassOwnPtr<SafeReleaseTask> create(T* callbackToRelease)
+ {
+ return adoptPtr(new SafeReleaseTask(callbackToRelease));
+ }
+
+ virtual void performTask(ScriptExecutionContext* context)
+ {
+ ASSERT(m_callbackToRelease && context && context->isContextThread());
+ m_callbackToRelease->deref();
+ context->deref();
+ }
+
+ virtual bool isCleanupTask() const { return true; }
+
+ private:
+ SafeReleaseTask(T* callbackToRelease)
+ : m_callbackToRelease(callbackToRelease)
+ {
+ }
+
+ T* m_callbackToRelease;
+ };
Mutex m_mutex;
RefPtr<T> m_callback;