WebAssembly: When we GC to try to get a fast memory, we should call collectAllGarbage...
authorsbarati@apple.com <sbarati@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 15 Mar 2017 23:17:15 +0000 (23:17 +0000)
committersbarati@apple.com <sbarati@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 15 Mar 2017 23:17:15 +0000 (23:17 +0000)
https://bugs.webkit.org/show_bug.cgi?id=169704

Reviewed by Mark Lam.

We weren't always sweeping the memory needed to free
the WasmMemory we wanted to use. collectAllGarbage()
will do this if the JS objects wrapping WasmMemory
are dead.

This patch also moves the increment of the allocatedFastMemories
integer to be thread safe.

* wasm/WasmMemory.cpp:
(JSC::Wasm::tryGetFastMemory):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@214018 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/wasm/WasmMemory.cpp

index ddd9935..d3a170f 100644 (file)
@@ -1,3 +1,21 @@
+2017-03-15  Saam Barati  <sbarati@apple.com>
+
+        WebAssembly: When we GC to try to get a fast memory, we should call collectAllGarbage(), not collectSync()
+        https://bugs.webkit.org/show_bug.cgi?id=169704
+
+        Reviewed by Mark Lam.
+
+        We weren't always sweeping the memory needed to free
+        the WasmMemory we wanted to use. collectAllGarbage()
+        will do this if the JS objects wrapping WasmMemory
+        are dead.
+
+        This patch also moves the increment of the allocatedFastMemories
+        integer to be thread safe.
+
+        * wasm/WasmMemory.cpp:
+        (JSC::Wasm::tryGetFastMemory):
+
 2017-03-15  Mark Lam  <mark.lam@apple.com>
 
         Fix exception scope verification failures in jsc.cpp.
index 9434d3f..eb1dd78 100644 (file)
@@ -119,15 +119,15 @@ inline bool tryGetFastMemory(VM& vm, void*& memory, size_t& mappedCapacity, Memo
     // If we have allocated all the fast memories... too bad.
     if (allocatedFastMemories == maxFastMemories) {
         // There is a reasonable chance that another module has died but has not been collected yet. Don't lose hope yet!
-        vm.heap.collectSync();
+        vm.heap.collectAllGarbage();
         return dequeFastMemory();
     }
 
     if (mmapBytes(fastMemoryMappedBytes, memory)) {
         mappedCapacity = fastMemoryMappedBytes;
         mode = Memory::Signaling;
-        allocatedFastMemories++;
         LockHolder locker(memoryLock);
+        allocatedFastMemories++;
         auto result = activeFastMemories(locker).add(memory);
         ASSERT_UNUSED(result, result.isNewEntry);
     }