diff options
author | Allan Sandfeld Jensen <allan.jensen@digia.com> | 2013-09-13 12:51:20 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-09-19 20:50:05 +0200 |
commit | d441d6f39bb846989d95bcf5caf387b42414718d (patch) | |
tree | e367e64a75991c554930278175d403c072de6bb8 /Source/JavaScriptCore/runtime/JSLock.cpp | |
parent | 0060b2994c07842f4c59de64b5e3e430525c4b90 (diff) | |
download | qtwebkit-d441d6f39bb846989d95bcf5caf387b42414718d.tar.gz |
Import Qt5x2 branch of QtWebkit for Qt 5.2
Importing a new snapshot of webkit.
Change-Id: I2d01ad12cdc8af8cb015387641120a9d7ea5f10c
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@digia.com>
Diffstat (limited to 'Source/JavaScriptCore/runtime/JSLock.cpp')
-rw-r--r-- | Source/JavaScriptCore/runtime/JSLock.cpp | 54 |
1 files changed, 34 insertions, 20 deletions
diff --git a/Source/JavaScriptCore/runtime/JSLock.cpp b/Source/JavaScriptCore/runtime/JSLock.cpp index 5e3d12c92..4baa2a603 100644 --- a/Source/JavaScriptCore/runtime/JSLock.cpp +++ b/Source/JavaScriptCore/runtime/JSLock.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005, 2008 Apple Inc. All rights reserved. + * Copyright (C) 2005, 2008, 2012 Apple Inc. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -25,7 +25,7 @@ #include "CallFrame.h" #include "JSGlobalObject.h" #include "JSObject.h" - +#include "Operations.h" #if USE(PTHREADS) #include <pthread.h> @@ -51,32 +51,40 @@ void GlobalJSLock::initialize() } JSLockHolder::JSLockHolder(ExecState* exec) - : m_globalData(&exec->globalData()) + : m_vm(&exec->vm()) +{ + init(); +} + +JSLockHolder::JSLockHolder(VM* vm) + : m_vm(vm) { - m_globalData->apiLock().lock(); + init(); } -JSLockHolder::JSLockHolder(JSGlobalData* globalData) - : m_globalData(globalData) +JSLockHolder::JSLockHolder(VM& vm) + : m_vm(&vm) { - m_globalData->apiLock().lock(); + init(); } -JSLockHolder::JSLockHolder(JSGlobalData& globalData) - : m_globalData(&globalData) +void JSLockHolder::init() { - m_globalData->apiLock().lock(); + m_vm->apiLock().lock(); } JSLockHolder::~JSLockHolder() { - m_globalData->apiLock().unlock(); + RefPtr<JSLock> apiLock(&m_vm->apiLock()); + m_vm.clear(); + apiLock->unlock(); } -JSLock::JSLock() +JSLock::JSLock(VM* vm) : m_ownerThread(0) , m_lockCount(0) , m_lockDropDepth(0) + , m_vm(vm) { m_spinLock.Init(); } @@ -85,6 +93,12 @@ JSLock::~JSLock() { } +void JSLock::willDestroyVM(VM* vm) +{ + ASSERT_UNUSED(vm, m_vm == vm); + m_vm = 0; +} + void JSLock::lock() { ThreadIdentifier currentThread = WTF::currentThread(); @@ -119,12 +133,12 @@ void JSLock::unlock() void JSLock::lock(ExecState* exec) { - exec->globalData().apiLock().lock(); + exec->vm().apiLock().lock(); } void JSLock::unlock(ExecState* exec) { - exec->globalData().apiLock().unlock(); + exec->vm().apiLock().unlock(); } bool JSLock::currentThreadIsHoldingLock() @@ -201,21 +215,21 @@ void JSLock::grabAllLocks(unsigned lockCount) JSLock::DropAllLocks::DropAllLocks(ExecState* exec) : m_lockCount(0) - , m_globalData(&exec->globalData()) + , m_vm(&exec->vm()) { - m_lockCount = m_globalData->apiLock().dropAllLocks(); + m_lockCount = m_vm->apiLock().dropAllLocks(); } -JSLock::DropAllLocks::DropAllLocks(JSGlobalData* globalData) +JSLock::DropAllLocks::DropAllLocks(VM* vm) : m_lockCount(0) - , m_globalData(globalData) + , m_vm(vm) { - m_lockCount = m_globalData->apiLock().dropAllLocks(); + m_lockCount = m_vm->apiLock().dropAllLocks(); } JSLock::DropAllLocks::~DropAllLocks() { - m_globalData->apiLock().grabAllLocks(m_lockCount); + m_vm->apiLock().grabAllLocks(m_lockCount); } } // namespace JSC |