From 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c Mon Sep 17 00:00:00 2001 From: Lorry Tar Creator Date: Tue, 27 Jun 2017 06:07:23 +0000 Subject: webkitgtk-2.16.5 --- .../Modules/webdatabase/SQLCallbackWrapper.h | 72 ++++++++-------------- 1 file changed, 24 insertions(+), 48 deletions(-) (limited to 'Source/WebCore/Modules/webdatabase/SQLCallbackWrapper.h') diff --git a/Source/WebCore/Modules/webdatabase/SQLCallbackWrapper.h b/Source/WebCore/Modules/webdatabase/SQLCallbackWrapper.h index c184a3738..d0d128096 100644 --- a/Source/WebCore/Modules/webdatabase/SQLCallbackWrapper.h +++ b/Source/WebCore/Modules/webdatabase/SQLCallbackWrapper.h @@ -10,7 +10,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of + * 3. Neither the name of Apple Inc. ("Apple") nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * @@ -25,13 +25,11 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef SQLCallbackWrapper_h -#define SQLCallbackWrapper_h -#if ENABLE(SQL_DATABASE) +#pragma once #include "ScriptExecutionContext.h" -#include +#include namespace WebCore { @@ -43,8 +41,8 @@ namespace WebCore { // - by unwrapping and then dereferencing normally - on context thread only template class SQLCallbackWrapper { public: - SQLCallbackWrapper(PassRefPtr callback, ScriptExecutionContext* scriptExecutionContext) - : m_callback(callback) + SQLCallbackWrapper(RefPtr&& callback, ScriptExecutionContext* scriptExecutionContext) + : m_callback(WTFMove(callback)) , m_scriptExecutionContext(m_callback ? scriptExecutionContext : 0) { ASSERT(!m_callback || (m_scriptExecutionContext.get() && m_scriptExecutionContext->isContextThread())); @@ -57,69 +55,47 @@ public: void clear() { - ScriptExecutionContext* context; + ScriptExecutionContext* scriptExecutionContextPtr; T* callback; { - MutexLocker locker(m_mutex); + LockHolder locker(m_mutex); if (!m_callback) { ASSERT(!m_scriptExecutionContext); return; } if (m_scriptExecutionContext->isContextThread()) { - m_callback = 0; - m_scriptExecutionContext = 0; + m_callback = nullptr; + m_scriptExecutionContext = nullptr; return; } - context = m_scriptExecutionContext.release().leakRef(); - callback = m_callback.release().leakRef(); + scriptExecutionContextPtr = m_scriptExecutionContext.leakRef(); + callback = m_callback.leakRef(); } - context->postTask(SafeReleaseTask::create(callback)); + scriptExecutionContextPtr->postTask({ + ScriptExecutionContext::Task::CleanupTask, + [callback, scriptExecutionContextPtr] (ScriptExecutionContext& context) { + ASSERT_UNUSED(context, &context == scriptExecutionContextPtr && context.isContextThread()); + callback->deref(); + scriptExecutionContextPtr->deref(); + } + }); } - PassRefPtr unwrap() + RefPtr unwrap() { - MutexLocker locker(m_mutex); + LockHolder locker(m_mutex); ASSERT(!m_callback || m_scriptExecutionContext->isContextThread()); - m_scriptExecutionContext = 0; - return m_callback.release(); + m_scriptExecutionContext = nullptr; + return WTFMove(m_callback); } // Useful for optimizations only, please test the return value of unwrap to be sure. bool hasCallback() const { return m_callback; } private: - class SafeReleaseTask : public ScriptExecutionContext::Task { - public: - static PassOwnPtr 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: - explicit SafeReleaseTask(T* callbackToRelease) - : m_callbackToRelease(callbackToRelease) - { - } - - T* m_callbackToRelease; - }; - - Mutex m_mutex; + Lock m_mutex; RefPtr m_callback; RefPtr m_scriptExecutionContext; }; } // namespace WebCore - -#endif // ENABLE(SQL_DATABASE) - -#endif // SQLCallbackWrapper_h -- cgit v1.2.1