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