Title: [279008] trunk/Source/_javascript_Core
Revision
279008
Author
[email protected]
Date
2021-06-17 14:12:45 -0700 (Thu, 17 Jun 2021)

Log Message

Reimplement JSC::CachePayload without FileSystem::unmapViewOfFile and FileSystem::MappedFileData::leakHandle
https://bugs.webkit.org/show_bug.cgi?id=227014

Reviewed by Yusuke Suzuki.

r247542 (Bug 199759) added FileSystem::unmapViewOfFile and
FileSystem::MappedFileData::leakHandle for JSC::CachePayload to
get the mapped address and to free the address.

However, Bug 227011 is going to add a file mapping handle to
FileSystem::MappedFileData for Windows port to create a
SharedMemory from a MappedFileData. Destruction of MappedFileData
should be done only by MappedFileData dtor.

* runtime/CachePayload.cpp:
(JSC::CachePayload::makeMappedPayload):
(JSC::CachePayload::makeMallocPayload):
(JSC::CachePayload::makeEmptyPayload):
(JSC::CachePayload::CachePayload):
(JSC::CachePayload::data const):
(JSC::CachePayload::size const):
(JSC::CachePayload::~CachePayload): Deleted.
(JSC::CachePayload::operator=): Deleted.
(JSC::CachePayload::freeData): Deleted.
* runtime/CachePayload.h: Use Variant for data.
(JSC::CachePayload::data const): Deleted.
(JSC::CachePayload::size const): Deleted.
(JSC::CachePayload::CachePayload): Deleted.

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (279007 => 279008)


--- trunk/Source/_javascript_Core/ChangeLog	2021-06-17 20:49:31 UTC (rev 279007)
+++ trunk/Source/_javascript_Core/ChangeLog	2021-06-17 21:12:45 UTC (rev 279008)
@@ -1,3 +1,34 @@
+2021-06-17  Fujii Hironori  <[email protected]>
+
+        Reimplement JSC::CachePayload without FileSystem::unmapViewOfFile and FileSystem::MappedFileData::leakHandle
+        https://bugs.webkit.org/show_bug.cgi?id=227014
+
+        Reviewed by Yusuke Suzuki.
+
+        r247542 (Bug 199759) added FileSystem::unmapViewOfFile and
+        FileSystem::MappedFileData::leakHandle for JSC::CachePayload to
+        get the mapped address and to free the address.
+
+        However, Bug 227011 is going to add a file mapping handle to
+        FileSystem::MappedFileData for Windows port to create a
+        SharedMemory from a MappedFileData. Destruction of MappedFileData
+        should be done only by MappedFileData dtor.
+
+        * runtime/CachePayload.cpp:
+        (JSC::CachePayload::makeMappedPayload):
+        (JSC::CachePayload::makeMallocPayload):
+        (JSC::CachePayload::makeEmptyPayload):
+        (JSC::CachePayload::CachePayload):
+        (JSC::CachePayload::data const):
+        (JSC::CachePayload::size const):
+        (JSC::CachePayload::~CachePayload): Deleted.
+        (JSC::CachePayload::operator=): Deleted.
+        (JSC::CachePayload::freeData): Deleted.
+        * runtime/CachePayload.h: Use Variant for data.
+        (JSC::CachePayload::data const): Deleted.
+        (JSC::CachePayload::size const): Deleted.
+        (JSC::CachePayload::CachePayload): Deleted.
+
 2021-06-17  Yijia Huang  <[email protected]>
 
         Add a new pattern to instruction selector to utilize UBFX supported by ARM64

Modified: trunk/Source/_javascript_Core/runtime/CachePayload.cpp (279007 => 279008)


--- trunk/Source/_javascript_Core/runtime/CachePayload.cpp	2021-06-17 20:49:31 UTC (rev 279007)
+++ trunk/Source/_javascript_Core/runtime/CachePayload.cpp	2021-06-17 21:12:45 UTC (rev 279008)
@@ -30,49 +30,52 @@
 
 CachePayload CachePayload::makeMappedPayload(FileSystem::MappedFileData&& data)
 {
-    return CachePayload(true, data.leakHandle(), data.size());
+    return CachePayload(WTFMove(data));
 }
 
 CachePayload CachePayload::makeMallocPayload(MallocPtr<uint8_t, VMMalloc>&& data, size_t size)
 {
-    return CachePayload(false, data.leakPtr(), size);
+    return CachePayload(std::pair { WTFMove(data), size });
 }
 
 CachePayload CachePayload::makeEmptyPayload()
 {
-    return CachePayload(true, nullptr, 0);
+    return CachePayload(std::pair { nullptr, 0 });
 }
 
 CachePayload::CachePayload(CachePayload&& other)
 {
-    m_mapped = other.m_mapped;
-    m_size = other.m_size;
-    m_data = other.m_data;
-    other.m_mapped = false;
-    other.m_data = nullptr;
-    other.m_size = 0;
+    m_data = WTFMove(other.m_data);
+    other.m_data = std::pair { nullptr, 0 };
 }
 
-CachePayload::~CachePayload()
+CachePayload::CachePayload(Variant<FileSystem::MappedFileData, std::pair<MallocPtr<uint8_t, VMMalloc>, size_t>>&& data)
+    : m_data(WTFMove(data))
 {
-    freeData();
 }
 
-CachePayload& CachePayload::operator=(CachePayload&& other)
+CachePayload::~CachePayload() = default;
+
+const uint8_t* CachePayload::data() const
 {
-    ASSERT(&other != this);
-    freeData();
-    return *new (this) CachePayload(WTFMove(other));
+    return WTF::switchOn(m_data,
+        [](const FileSystem::MappedFileData& data) {
+            return static_cast<const uint8_t*>(data.data());
+        },
+        [](const std::pair<MallocPtr<uint8_t, VMMalloc>, size_t>& data) {
+            return data.first.get();
+        });
 }
 
-void CachePayload::freeData()
+size_t CachePayload::size() const
 {
-    if (!m_data)
-        return;
-    if (m_mapped) {
-        FileSystem::unmapViewOfFile(m_data, m_size);
-    } else
-        fastFree(m_data);
+    return WTF::switchOn(m_data,
+        [](const FileSystem::MappedFileData& data) {
+            return data.size();
+        },
+        [](const std::pair<MallocPtr<uint8_t, VMMalloc>, size_t>& data) {
+            return data.second;
+        });
 }
 
 } // namespace JSC

Modified: trunk/Source/_javascript_Core/runtime/CachePayload.h (279007 => 279008)


--- trunk/Source/_javascript_Core/runtime/CachePayload.h	2021-06-17 20:49:31 UTC (rev 279007)
+++ trunk/Source/_javascript_Core/runtime/CachePayload.h	2021-06-17 21:12:45 UTC (rev 279008)
@@ -28,6 +28,7 @@
 #include "VM.h"
 #include <wtf/FileSystem.h>
 #include <wtf/MallocPtr.h>
+#include <wtf/Variant.h>
 
 namespace JSC {
 
@@ -41,22 +42,13 @@
     JS_EXPORT_PRIVATE ~CachePayload();
     JS_EXPORT_PRIVATE CachePayload& operator=(CachePayload&& other);
 
-    const uint8_t* data() const { return m_data; }
-    size_t size() const { return m_size; }
+    JS_EXPORT_PRIVATE const uint8_t* data() const;
+    JS_EXPORT_PRIVATE size_t size() const;
 
 private:
-    CachePayload(bool mapped, void* data, size_t size)
-        : m_mapped(mapped)
-        , m_size(size)
-        , m_data(static_cast<uint8_t*>(data))
-    {
-    }
+    CachePayload(Variant<FileSystem::MappedFileData, std::pair<MallocPtr<uint8_t, VMMalloc>, size_t>>&&);
 
-    void freeData();
-
-    bool m_mapped;
-    size_t m_size;
-    uint8_t* m_data;
+    Variant<FileSystem::MappedFileData, std::pair<MallocPtr<uint8_t, VMMalloc>, size_t>> m_data;
 };
 
 } // namespace JSC
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to