Title: [250725] trunk/Source

Diff

Modified: trunk/Source/_javascript_Core/API/JSManagedValue.mm (250724 => 250725)


--- trunk/Source/_javascript_Core/API/JSManagedValue.mm	2019-10-04 15:34:06 UTC (rev 250724)
+++ trunk/Source/_javascript_Core/API/JSManagedValue.mm	2019-10-04 15:35:03 UTC (rev 250725)
@@ -147,9 +147,12 @@
 
 - (JSValue *)value
 {
-    JSC::JSLockHolder locker(JSC::JSLockHolder::LockIfVMIsLive, *m_lock.get());
-    if (!locker.vm())
+    WTF::Locker<JSC::JSLock> locker(m_lock.get());
+    JSC::VM* vm = m_lock->vm();
+    if (!vm)
         return nil;
+
+    JSC::JSLockHolder apiLocker(vm);
     if (!m_globalObject)
         return nil;
     if (m_weakValue.isClear())

Modified: trunk/Source/_javascript_Core/API/glib/JSCWeakValue.cpp (250724 => 250725)


--- trunk/Source/_javascript_Core/API/glib/JSCWeakValue.cpp	2019-10-04 15:34:06 UTC (rev 250724)
+++ trunk/Source/_javascript_Core/API/glib/JSCWeakValue.cpp	2019-10-04 15:35:03 UTC (rev 250725)
@@ -189,10 +189,12 @@
     g_return_val_if_fail(JSC_IS_WEAK_VALUE(weakValue), nullptr);
 
     JSCWeakValuePrivate* priv = weakValue->priv;
-    JSC::JSLockHolder locker(JSC::JSLockHolder::LockIfVMIsLive, *priv->lock.get());
-    if (!locker.vm())
+    WTF::Locker<JSC::JSLock> locker(priv->lock.get());
+    JSC::VM* vm = priv->lock->vm();
+    if (!vm)
         return nullptr;
 
+    JSC::JSLockHolder apiLocker(vm);
     if (!priv->globalObject || priv->weakValueRef.isClear())
         return nullptr;
 

Modified: trunk/Source/_javascript_Core/ChangeLog (250724 => 250725)


--- trunk/Source/_javascript_Core/ChangeLog	2019-10-04 15:34:06 UTC (rev 250724)
+++ trunk/Source/_javascript_Core/ChangeLog	2019-10-04 15:35:03 UTC (rev 250725)
@@ -1,5 +1,17 @@
 2019-10-04  Truitt Savell  <tsav...@apple.com>
 
+        Unreviewed, rolling out r250583.
+
+        Broke multiple internal API tests
+
+        Reverted changeset:
+
+        "[JSC] Place VM* in TLS"
+        https://bugs.webkit.org/show_bug.cgi?id=202391
+        https://trac.webkit.org/changeset/250583
+
+2019-10-04  Truitt Savell  <tsav...@apple.com>
+
         Unreviewed, rolling out r250594.
 
         Broke multiple internal API tests

Modified: trunk/Source/_javascript_Core/runtime/InitializeThreading.cpp (250724 => 250725)


--- trunk/Source/_javascript_Core/runtime/InitializeThreading.cpp	2019-10-04 15:34:06 UTC (rev 250724)
+++ trunk/Source/_javascript_Core/runtime/InitializeThreading.cpp	2019-10-04 15:35:03 UTC (rev 250725)
@@ -71,8 +71,6 @@
 
         initializePtrTagLookup();
 
-        VM::initializeTLS();
-
 #if ENABLE(WRITE_BARRIER_PROFILING)
         WriteBarrierCounters::initialize();
 #endif

Modified: trunk/Source/_javascript_Core/runtime/JSLock.cpp (250724 => 250725)


--- trunk/Source/_javascript_Core/runtime/JSLock.cpp	2019-10-04 15:34:06 UTC (rev 250724)
+++ trunk/Source/_javascript_Core/runtime/JSLock.cpp	2019-10-04 15:35:03 UTC (rev 250725)
@@ -28,7 +28,6 @@
 #include "JSCInlines.h"
 #include "MachineStackMarker.h"
 #include "SamplingProfiler.h"
-#include "VM.h"
 #include "WasmCapabilities.h"
 #include "WasmMachineThreads.h"
 #include <thread>
@@ -68,27 +67,13 @@
     : m_vm(&vm)
 {
     m_vm->apiLock().lock();
-    m_previousVMInTLS = VM::exchange(m_vm.get());
 }
 
-JSLockHolder::JSLockHolder(LockIfVMIsLiveTag, JSLock& lock)
-{
-    lock.lock();
-    if (lock.m_vm) {
-        m_vm = lock.m_vm;
-        m_previousVMInTLS = VM::exchange(m_vm.get());
-    } else
-        lock.unlock();
-}
-
 JSLockHolder::~JSLockHolder()
 {
-    if (m_vm) {
-        RefPtr<JSLock> apiLock(&m_vm->apiLock());
-        m_vm = nullptr;
-        apiLock->unlock();
-        VM::exchange(m_previousVMInTLS); // Change VM only after unlocking. Otherwise, willReleaseLock will see previous VM.
-    }
+    RefPtr<JSLock> apiLock(&m_vm->apiLock());
+    m_vm = nullptr;
+    apiLock->unlock();
 }
 
 JSLock::JSLock(VM* vm)
@@ -237,6 +222,16 @@
     }
 }
 
+void JSLock::lock(ExecState* exec)
+{
+    exec->vm().apiLock().lock();
+}
+
+void JSLock::unlock(ExecState* exec)
+{
+    exec->vm().apiLock().unlock();
+}
+
 // This function returns the number of locks that were dropped.
 unsigned JSLock::dropAllLocks(DropAllLocks* dropper)
 {
@@ -290,8 +285,6 @@
         return;
     RELEASE_ASSERT(!m_vm->apiLock().currentThreadIsHoldingLock() || !m_vm->isCollectorBusyOnCurrentThread());
     m_droppedLockCount = m_vm->apiLock().dropAllLocks(this);
-    VM* previousVMInTLS = VM::exchange(nullptr);
-    ASSERT_UNUSED(previousVMInTLS, previousVMInTLS == m_vm.get());
 }
 
 JSLock::DropAllLocks::DropAllLocks(ExecState* exec)
@@ -309,8 +302,6 @@
     if (!m_vm)
         return;
     m_vm->apiLock().grabAllLocks(this, m_droppedLockCount);
-    VM* previousVMInTLS = VM::exchange(m_vm.get());
-    ASSERT_UNUSED(previousVMInTLS, previousVMInTLS);
 }
 
 } // namespace JSC

Modified: trunk/Source/_javascript_Core/runtime/JSLock.h (250724 => 250725)


--- trunk/Source/_javascript_Core/runtime/JSLock.h	2019-10-04 15:34:06 UTC (rev 250724)
+++ trunk/Source/_javascript_Core/runtime/JSLock.h	2019-10-04 15:35:03 UTC (rev 250725)
@@ -51,7 +51,6 @@
 
 class ExecState;
 class VM;
-class JSLock;
 
 // This class is used to protect the initialization of the legacy single 
 // shared VM.
@@ -64,34 +63,32 @@
     static Lock s_sharedInstanceMutex;
 };
 
-// Only JSLockHolder can take a JSLock.
 class JSLockHolder {
-    WTF_MAKE_NONCOPYABLE(JSLockHolder);
-    WTF_FORBID_HEAP_ALLOCATION(JSLockHolder);
 public:
     JS_EXPORT_PRIVATE JSLockHolder(VM*);
     JS_EXPORT_PRIVATE JSLockHolder(VM&);
     JS_EXPORT_PRIVATE JSLockHolder(ExecState*);
 
-    enum LockIfVMIsLiveTag { LockIfVMIsLive };
-    JS_EXPORT_PRIVATE JSLockHolder(LockIfVMIsLiveTag, JSLock&);
-
     JS_EXPORT_PRIVATE ~JSLockHolder();
 
-    VM* vm() { return m_vm.get(); }
-
 private:
     RefPtr<VM> m_vm;
-    VM* m_previousVMInTLS { nullptr };
 };
 
 class JSLock : public ThreadSafeRefCounted<JSLock> {
     WTF_MAKE_NONCOPYABLE(JSLock);
-    friend class JSLockHolder;
 public:
     JSLock(VM*);
     JS_EXPORT_PRIVATE ~JSLock();
 
+    JS_EXPORT_PRIVATE void lock();
+    JS_EXPORT_PRIVATE void unlock();
+
+    static void lock(ExecState*);
+    static void unlock(ExecState*);
+    static void lock(VM&);
+    static void unlock(VM&);
+
     VM* vm() { return m_vm; }
 
     Optional<RefPtr<Thread>> ownerThread() const
@@ -129,10 +126,6 @@
     bool isWebThreadAware() const { return m_isWebThreadAware; }
 
 private:
-    // This is called only from JSLockHolder or DropAllLocks.
-    JS_EXPORT_PRIVATE void lock();
-    JS_EXPORT_PRIVATE void unlock();
-
     void lock(intptr_t lockCount);
     void unlock(intptr_t unlockCount);
 

Modified: trunk/Source/_javascript_Core/runtime/JSRunLoopTimer.cpp (250724 => 250725)


--- trunk/Source/_javascript_Core/runtime/JSRunLoopTimer.cpp	2019-10-04 15:34:06 UTC (rev 250724)
+++ trunk/Source/_javascript_Core/runtime/JSRunLoopTimer.cpp	2019-10-04 15:35:03 UTC (rev 250725)
@@ -297,12 +297,14 @@
         }
     }
 
-    JSLockHolder locker(JSLockHolder::LockIfVMIsLive, m_apiLock.get());
-    if (!locker.vm()) {
+    std::lock_guard<JSLock> lock(m_apiLock.get());
+    RefPtr<VM> vm = m_apiLock->vm();
+    if (!vm) {
         // The VM has been destroyed, so we should just give up.
         return;
     }
-    doWork(*locker.vm());
+
+    doWork(*vm);
 }
 
 JSRunLoopTimer::JSRunLoopTimer(VM& vm)

Modified: trunk/Source/_javascript_Core/runtime/VM.cpp (250724 => 250725)


--- trunk/Source/_javascript_Core/runtime/VM.cpp	2019-10-04 15:34:06 UTC (rev 250724)
+++ trunk/Source/_javascript_Core/runtime/VM.cpp	2019-10-04 15:35:03 UTC (rev 250725)
@@ -1379,16 +1379,4 @@
     vmCreationShouldCrash = shouldCrash;
 }
 
-
-#if !HAVE(FAST_TLS)
-WTF::ThreadSpecificKey VM::tlsKey { WTF::InvalidThreadSpecificKey };
-#endif
-
-void VM::initializeTLS()
-{
-#if !HAVE(FAST_TLS)
-    WTF::threadSpecificKeyCreate(&tlsKey, nullptr);
-#endif
-}
-
 } // namespace JSC

Modified: trunk/Source/_javascript_Core/runtime/VM.h (250724 => 250725)


--- trunk/Source/_javascript_Core/runtime/VM.h	2019-10-04 15:34:06 UTC (rev 250724)
+++ trunk/Source/_javascript_Core/runtime/VM.h	2019-10-04 15:35:03 UTC (rev 250725)
@@ -314,39 +314,6 @@
     WeakRandom& random() { return m_random; }
     Integrity::Random& integrityRandom() { return m_integrityRandom; }
 
-#if HAVE(FAST_TLS)
-    static constexpr pthread_key_t tlsKey = WTF_VM_KEY;
-
-    static VM* exchange(VM* vm)
-    {
-        VM* previous = current();
-        _pthread_setspecific_direct(tlsKey, bitwise_cast<void*>(vm));
-        return previous;
-    }
-
-    static VM* current()
-    {
-        return bitwise_cast<VM*>(_pthread_getspecific_direct(tlsKey));
-    }
-#else
-    static WTF::ThreadSpecificKey tlsKey;
-
-    static VM* exchange(VM* vm)
-    {
-        ASSERT(tlsKey != WTF::InvalidThreadSpecificKey);
-        VM* previous = current();
-        WTF::threadSpecificSet(tlsKey, vm);
-        return previous;
-    }
-
-    static VM* current()
-    {
-        ASSERT(tlsKey != WTF::InvalidThreadSpecificKey);
-        return bitwise_cast<VM*>(WTF::threadSpecificGet(tlsKey));
-    }
-#endif
-    static void initializeTLS();
-
 private:
     unsigned nextID();
 

Modified: trunk/Source/WTF/ChangeLog (250724 => 250725)


--- trunk/Source/WTF/ChangeLog	2019-10-04 15:34:06 UTC (rev 250724)
+++ trunk/Source/WTF/ChangeLog	2019-10-04 15:35:03 UTC (rev 250725)
@@ -1,3 +1,15 @@
+2019-10-04  Truitt Savell  <tsav...@apple.com>
+
+        Unreviewed, rolling out r250583.
+
+        Broke multiple internal API tests
+
+        Reverted changeset:
+
+        "[JSC] Place VM* in TLS"
+        https://bugs.webkit.org/show_bug.cgi?id=202391
+        https://trac.webkit.org/changeset/250583
+
 2019-10-03  Keith Rollin  <krol...@apple.com>
 
         Remove some support for < iOS 13

Modified: trunk/Source/WTF/wtf/FastTLS.h (250724 => 250725)


--- trunk/Source/WTF/wtf/FastTLS.h	2019-10-04 15:34:06 UTC (rev 250724)
+++ trunk/Source/WTF/wtf/FastTLS.h	2019-10-04 15:35:03 UTC (rev 250725)
@@ -46,7 +46,7 @@
 #define WTF_THREAD_DATA_KEY WTF_FAST_TLS_KEY0
 #define WTF_WASM_CONTEXT_KEY WTF_FAST_TLS_KEY1
 #define WTF_TESTING_KEY WTF_WASM_CONTEXT_KEY // So far, this key is only used in places that don't do WebAssembly, so it's OK that they share the same key.
-#define WTF_VM_KEY WTF_FAST_TLS_KEY2
+#define WTF_GC_TLC_KEY WTF_FAST_TLS_KEY2
 
 #if ENABLE(FAST_TLS_JIT)
 inline unsigned fastTLSOffsetForKey(unsigned long slot)

Modified: trunk/Source/WebCore/ChangeLog (250724 => 250725)


--- trunk/Source/WebCore/ChangeLog	2019-10-04 15:34:06 UTC (rev 250724)
+++ trunk/Source/WebCore/ChangeLog	2019-10-04 15:35:03 UTC (rev 250725)
@@ -1,3 +1,15 @@
+2019-10-04  Truitt Savell  <tsav...@apple.com>
+
+        Unreviewed, rolling out r250583.
+
+        Broke multiple internal API tests
+
+        Reverted changeset:
+
+        "[JSC] Place VM* in TLS"
+        https://bugs.webkit.org/show_bug.cgi?id=202391
+        https://trac.webkit.org/changeset/250583
+
 2019-10-04  Alex Christensen  <achristen...@webkit.org>
 
         Simplify sandbox enabling macros

Modified: trunk/Source/WebCore/bindings/js/IDBBindingUtilities.cpp (250724 => 250725)


--- trunk/Source/WebCore/bindings/js/IDBBindingUtilities.cpp	2019-10-04 15:34:06 UTC (rev 250724)
+++ trunk/Source/WebCore/bindings/js/IDBBindingUtilities.cpp	2019-10-04 15:35:03 UTC (rev 250725)
@@ -133,7 +133,7 @@
     }
 
     VM& vm = state.vm();
-    JSLockHolder locker(vm);
+    Locker<JSLock> locker(vm.apiLock());
     auto scope = DECLARE_THROW_SCOPE(vm);
 
     switch (key->type()) {
@@ -386,9 +386,10 @@
 
     auto serializedValue = SerializedScriptValue::createFromWireBytes(Vector<uint8_t>(data));
 
-    JSLockHolder locker(globalObject.vm());
+    state.vm().apiLock().lock();
     Vector<RefPtr<MessagePort>> messagePorts;
     JSValue result = serializedValue->deserialize(state, &globalObject, messagePorts, value.blobURLs(), value.blobFilePaths(), SerializationErrorMode::NonThrowing);
+    state.vm().apiLock().unlock();
 
     return result;
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to