Title: [290857] branches/safari-613-branch/Source/bmalloc
Revision
290857
Author
[email protected]
Date
2022-03-04 17:44:20 -0800 (Fri, 04 Mar 2022)

Log Message

Apply patch. rdar://problem/89071706

Modified Paths


Removed Paths

Diff

Modified: branches/safari-613-branch/Source/bmalloc/CMakeLists.txt (290856 => 290857)


--- branches/safari-613-branch/Source/bmalloc/CMakeLists.txt	2022-03-05 01:06:41 UTC (rev 290856)
+++ branches/safari-613-branch/Source/bmalloc/CMakeLists.txt	2022-03-05 01:44:20 UTC (rev 290857)
@@ -126,7 +126,6 @@
     libpas/src/libpas/pas_local_allocator.c
     libpas/src/libpas/pas_local_allocator_scavenger_data.c
     libpas/src/libpas/pas_local_view_cache.c
-    libpas/src/libpas/pas_local_view_cache_node.c
     libpas/src/libpas/pas_lock.c
     libpas/src/libpas/pas_lock_free_read_ptr_ptr_hashtable.c
     libpas/src/libpas/pas_log.c
@@ -505,7 +504,6 @@
     libpas/src/libpas/pas_local_allocator_result.h
     libpas/src/libpas/pas_local_allocator_scavenger_data.h
     libpas/src/libpas/pas_local_view_cache.h
-    libpas/src/libpas/pas_local_view_cache_node.h
     libpas/src/libpas/pas_lock_free_read_ptr_ptr_hashtable.h
     libpas/src/libpas/pas_lock.h
     libpas/src/libpas/pas_log.h

Modified: branches/safari-613-branch/Source/bmalloc/ChangeLog (290856 => 290857)


--- branches/safari-613-branch/Source/bmalloc/ChangeLog	2022-03-05 01:06:41 UTC (rev 290856)
+++ branches/safari-613-branch/Source/bmalloc/ChangeLog	2022-03-05 01:44:20 UTC (rev 290857)
@@ -1,3 +1,85 @@
+2022-03-04  Russell Epstein  <[email protected]>
+
+        Apply patch. rdar://problem/89071706
+
+    2022-03-04  Yusuke Suzuki  <[email protected]>
+
+            Unreviewed, fix heap enumeration
+            https://bugs.webkit.org/show_bug.cgi?id=236662
+
+            * libpas/src/libpas/pas_enumerate_segregated_heaps.c:
+            (pas_enumerate_segregated_heaps):
+
+2022-02-16  Yusuke Suzuki  <[email protected]>
+
+        [libpas] Use segmented vector for TLC layout list
+        https://bugs.webkit.org/show_bug.cgi?id=236662
+
+        Reviewed by Saam Barati.
+
+        We add segmented vector for pas_thread_local_cache_layout_node iteration instead of using
+        linked-list of that to accelerate iteration performance. It does not affect on Speedometer2,
+        JetStream2, PLT5 etc., but we do this iteration frequently in scavenger thread, and reducing
+        time of this makes it efficient. While speeding up scavenger does not matter for throughput
+        of non scavenger threads since libpas works well without taking a lock in most times which
+        is blocked by scavenger, making scavenger faster is good for energy efficiency.
+
+        1. Use segmented vector for (concurrently read) pas_thread_local_cache_layout_node list.
+           We still keep nice for-loop abstraction for list of pas_thread_local_cache_layout_node.
+        2. Remove pas_local_view_cache_node since we no longer need it. It was introduced just to
+           make it linked-list node for pas_thread_local_cache_layout_node. But now, segmented vector
+           is holding it separately.
+        3. Move pas_segregated_size_directory_data's allocator_index to pas_segregated_size_directory.
+           Because of (1) change, we can make pas_segregated_size_directory linked-list-node, which
+           saves 4 bytes. So we can move pas_segregated_size_directory_data's allocator_index to
+           pas_segregated_size_directory since it is heavily accessed from the scavenger.
+
+        * CMakeLists.txt:
+        * bmalloc.xcodeproj/project.pbxproj:
+        * libpas/libpas.xcodeproj/project.pbxproj:
+        * libpas/src/libpas/pas_designated_intrinsic_heap.c:
+        (set_up_range):
+        * libpas/src/libpas/pas_enumerate_segregated_heaps.c:
+        (pas_enumerate_segregated_heaps):
+        * libpas/src/libpas/pas_local_view_cache_node.c: Removed.
+        * libpas/src/libpas/pas_local_view_cache_node.h: Removed.
+        * libpas/src/libpas/pas_redundant_local_allocator_node.c:
+        (pas_redundant_local_allocator_node_create):
+        * libpas/src/libpas/pas_redundant_local_allocator_node.h:
+        * libpas/src/libpas/pas_root.c:
+        (pas_root_construct):
+        * libpas/src/libpas/pas_root.h:
+        * libpas/src/libpas/pas_segregated_heap.c:
+        (recompute_size_lookup):
+        (pas_segregated_heap_ensure_allocator_index):
+        * libpas/src/libpas/pas_segregated_size_directory.c:
+        (pas_segregated_size_directory_create):
+        (pas_segregated_size_directory_ensure_data):
+        (pas_segregated_size_directory_create_tlc_allocator):
+        (pas_segregated_size_directory_get_allocator_from_tlc):
+        * libpas/src/libpas/pas_segregated_size_directory.h:
+        (pas_segregated_size_directory_has_tlc_allocator):
+        (pas_segregated_size_directory_get_tlc_allocator_index):
+        * libpas/src/libpas/pas_thread_local_cache.c:
+        (decommit_allocator_range):
+        (pas_thread_local_cache_for_all):
+        * libpas/src/libpas/pas_thread_local_cache_layout.c:
+        (pas_thread_local_cache_layout_add_node):
+        (pas_thread_local_cache_layout_add_view_cache):
+        (pas_thread_local_cache_layout_get_last_node):
+        * libpas/src/libpas/pas_thread_local_cache_layout.h:
+        (pas_thread_local_cache_layout_segment_get_node):
+        (pas_thread_local_cache_layout_segment_next_node):
+        * libpas/src/libpas/pas_thread_local_cache_layout_node.c:
+        (pas_thread_local_cache_layout_node_get_directory):
+        (allocator_index_ptr):
+        (next_ptr): Deleted.
+        (pas_thread_local_cache_layout_node_get_next): Deleted.
+        (pas_thread_local_cache_layout_node_set_next): Deleted.
+        * libpas/src/libpas/pas_thread_local_cache_layout_node.h:
+        (pas_wrap_local_view_cache_node):
+        (pas_unwrap_local_view_cache_node):
+
 2022-02-07  Russell Epstein  <[email protected]>
 
         Cherry-pick r289144. rdar://problem/88585404

Modified: branches/safari-613-branch/Source/bmalloc/bmalloc.xcodeproj/project.pbxproj (290856 => 290857)


--- branches/safari-613-branch/Source/bmalloc/bmalloc.xcodeproj/project.pbxproj	2022-03-05 01:06:41 UTC (rev 290856)
+++ branches/safari-613-branch/Source/bmalloc/bmalloc.xcodeproj/project.pbxproj	2022-03-05 01:44:20 UTC (rev 290857)
@@ -88,11 +88,9 @@
 		0F7C92E926E57F75006AF012 /* pas_heap_runtime_config.c in Sources */ = {isa = PBXBuildFile; fileRef = 0F7C92D926E57F75006AF012 /* pas_heap_runtime_config.c */; };
 		0F7C92EA26E57F75006AF012 /* pas_local_allocator_scavenger_data.c in Sources */ = {isa = PBXBuildFile; fileRef = 0F7C92DA26E57F75006AF012 /* pas_local_allocator_scavenger_data.c */; };
 		0F7C92EB26E57F75006AF012 /* pas_compact_segregated_size_directory_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7C92DB26E57F75006AF012 /* pas_compact_segregated_size_directory_ptr.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		0F7C92EC26E57F75006AF012 /* pas_local_view_cache_node.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7C92DC26E57F75006AF012 /* pas_local_view_cache_node.h */; };
 		0F7C92ED26E57F75006AF012 /* pas_segregated_size_directory_creation_mode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7C92DD26E57F75006AF012 /* pas_segregated_size_directory_creation_mode.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		0F7C92EE26E57F75006AF012 /* pas_local_view_cache.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7C92DE26E57F75006AF012 /* pas_local_view_cache.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		0F7C92F026E57F75006AF012 /* pas_local_allocator_kind.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7C92E026E57F75006AF012 /* pas_local_allocator_kind.h */; settings = {ATTRIBUTES = (Private, ); }; };
-		0F7C92F126E57F75006AF012 /* pas_local_view_cache_node.c in Sources */ = {isa = PBXBuildFile; fileRef = 0F7C92E126E57F75006AF012 /* pas_local_view_cache_node.c */; };
 		0F7EB8231F9541B000F1ABCB /* EligibilityResult.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB7FC1F9541AD00F1ABCB /* EligibilityResult.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		0F7EB8241F9541B000F1ABCB /* IsoHeapImplInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB7FD1F9541AD00F1ABCB /* IsoHeapImplInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		0F7EB8251F9541B000F1ABCB /* DeferredTriggerInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7EB7FE1F9541AD00F1ABCB /* DeferredTriggerInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -747,11 +745,9 @@
 		0F7C92D926E57F75006AF012 /* pas_heap_runtime_config.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pas_heap_runtime_config.c; path = libpas/src/libpas/pas_heap_runtime_config.c; sourceTree = "<group>"; };
 		0F7C92DA26E57F75006AF012 /* pas_local_allocator_scavenger_data.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pas_local_allocator_scavenger_data.c; path = libpas/src/libpas/pas_local_allocator_scavenger_data.c; sourceTree = "<group>"; };
 		0F7C92DB26E57F75006AF012 /* pas_compact_segregated_size_directory_ptr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pas_compact_segregated_size_directory_ptr.h; path = libpas/src/libpas/pas_compact_segregated_size_directory_ptr.h; sourceTree = "<group>"; };
-		0F7C92DC26E57F75006AF012 /* pas_local_view_cache_node.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pas_local_view_cache_node.h; path = libpas/src/libpas/pas_local_view_cache_node.h; sourceTree = "<group>"; };
 		0F7C92DD26E57F75006AF012 /* pas_segregated_size_directory_creation_mode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pas_segregated_size_directory_creation_mode.h; path = libpas/src/libpas/pas_segregated_size_directory_creation_mode.h; sourceTree = "<group>"; };
 		0F7C92DE26E57F75006AF012 /* pas_local_view_cache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pas_local_view_cache.h; path = libpas/src/libpas/pas_local_view_cache.h; sourceTree = "<group>"; };
 		0F7C92E026E57F75006AF012 /* pas_local_allocator_kind.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pas_local_allocator_kind.h; path = libpas/src/libpas/pas_local_allocator_kind.h; sourceTree = "<group>"; };
-		0F7C92E126E57F75006AF012 /* pas_local_view_cache_node.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = pas_local_view_cache_node.c; path = libpas/src/libpas/pas_local_view_cache_node.c; sourceTree = "<group>"; };
 		0F7EB7FC1F9541AD00F1ABCB /* EligibilityResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EligibilityResult.h; path = bmalloc/EligibilityResult.h; sourceTree = SOURCE_ROOT; };
 		0F7EB7FD1F9541AD00F1ABCB /* IsoHeapImplInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IsoHeapImplInlines.h; path = bmalloc/IsoHeapImplInlines.h; sourceTree = SOURCE_ROOT; };
 		0F7EB7FE1F9541AD00F1ABCB /* DeferredTriggerInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DeferredTriggerInlines.h; path = bmalloc/DeferredTriggerInlines.h; sourceTree = SOURCE_ROOT; };
@@ -1730,8 +1726,6 @@
 				0F7C92D426E57F74006AF012 /* pas_local_allocator_scavenger_data.h */,
 				0F7C92D626E57F75006AF012 /* pas_local_view_cache.c */,
 				0F7C92DE26E57F75006AF012 /* pas_local_view_cache.h */,
-				0F7C92E126E57F75006AF012 /* pas_local_view_cache_node.c */,
-				0F7C92DC26E57F75006AF012 /* pas_local_view_cache_node.h */,
 				0FC40BD9245243A400876DA0 /* pas_lock.c */,
 				0FC40A8B2451498C00876DA0 /* pas_lock.h */,
 				0FC40A562451498800876DA0 /* pas_lock_free_read_ptr_ptr_hashtable.c */,
@@ -2416,7 +2410,6 @@
 				0FC40B2E2451499400876DA0 /* pas_local_allocator_result.h in Headers */,
 				0F7C92E426E57F75006AF012 /* pas_local_allocator_scavenger_data.h in Headers */,
 				0F7C92EE26E57F75006AF012 /* pas_local_view_cache.h in Headers */,
-				0F7C92EC26E57F75006AF012 /* pas_local_view_cache_node.h in Headers */,
 				0FC40B672451499400876DA0 /* pas_lock.h in Headers */,
 				0FC40B7F2451499400876DA0 /* pas_lock_free_read_ptr_ptr_hashtable.h in Headers */,
 				0FC40B9C2451499400876DA0 /* pas_log.h in Headers */,
@@ -2776,7 +2769,6 @@
 				0FC40B072451499400876DA0 /* pas_local_allocator.c in Sources */,
 				0F7C92EA26E57F75006AF012 /* pas_local_allocator_scavenger_data.c in Sources */,
 				0F7C92E626E57F75006AF012 /* pas_local_view_cache.c in Sources */,
-				0F7C92F126E57F75006AF012 /* pas_local_view_cache_node.c in Sources */,
 				0FC40BDA245243A400876DA0 /* pas_lock.c in Sources */,
 				0FC40B342451499400876DA0 /* pas_lock_free_read_ptr_ptr_hashtable.c in Sources */,
 				0FC40BB22451499400876DA0 /* pas_log.c in Sources */,

Modified: branches/safari-613-branch/Source/bmalloc/libpas/libpas.xcodeproj/project.pbxproj (290856 => 290857)


--- branches/safari-613-branch/Source/bmalloc/libpas/libpas.xcodeproj/project.pbxproj	2022-03-05 01:06:41 UTC (rev 290856)
+++ branches/safari-613-branch/Source/bmalloc/libpas/libpas.xcodeproj/project.pbxproj	2022-03-05 01:44:20 UTC (rev 290857)
@@ -53,10 +53,8 @@
 		0F148713269B7518006887A9 /* pas_compact_segregated_exclusive_view_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F14870D269B7518006887A9 /* pas_compact_segregated_exclusive_view_ptr.h */; };
 		0F148714269B7518006887A9 /* pas_heap_runtime_config.c in Sources */ = {isa = PBXBuildFile; fileRef = 0F14870E269B7518006887A9 /* pas_heap_runtime_config.c */; };
 		0F148715269B7518006887A9 /* pas_compact_segregated_size_directory_ptr.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F14870F269B7518006887A9 /* pas_compact_segregated_size_directory_ptr.h */; };
-		0F14871F269F5FCA006887A9 /* pas_local_view_cache_node.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F14871A269F5FCA006887A9 /* pas_local_view_cache_node.h */; };
 		0F148720269F5FCA006887A9 /* pas_local_view_cache.c in Sources */ = {isa = PBXBuildFile; fileRef = 0F14871B269F5FCA006887A9 /* pas_local_view_cache.c */; };
 		0F148721269F5FCA006887A9 /* pas_segregated_size_directory_creation_mode.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F14871C269F5FCA006887A9 /* pas_segregated_size_directory_creation_mode.h */; };
-		0F148722269F5FCA006887A9 /* pas_local_view_cache_node.c in Sources */ = {isa = PBXBuildFile; fileRef = 0F14871D269F5FCA006887A9 /* pas_local_view_cache_node.c */; };
 		0F148723269F5FCA006887A9 /* pas_thread_local_cache_layout_node_kind.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F14871E269F5FCA006887A9 /* pas_thread_local_cache_layout_node_kind.h */; };
 		0F1518FD23441E3200832B5C /* pas_has_object.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F1518FC23441E3200832B5C /* pas_has_object.h */; };
 		0F18E63E2628BFB700F6903D /* pas_shared_page_directory_by_size.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F18E63C2628BFB600F6903D /* pas_shared_page_directory_by_size.h */; };
@@ -577,6 +575,8 @@
 		2C971CFF278E136300C9E129 /* pas_lenient_compact_ptr_inlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C971CFD278E136300C9E129 /* pas_lenient_compact_ptr_inlines.h */; };
 		2CB9B153278F6C85003A8C1B /* LotsOfHeapsAndThreads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2CB9B152278F6C85003A8C1B /* LotsOfHeapsAndThreads.cpp */; };
 		2CE2AE35275A953E00D02BBC /* BitfitTests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2CE2AE34275A953E00D02BBC /* BitfitTests.cpp */; };
+		E3A7DC8F27BEF8EA004E76E9 /* pas_thread_suspend_lock.h in Headers */ = {isa = PBXBuildFile; fileRef = E3A7DC8D27BEF8EA004E76E9 /* pas_thread_suspend_lock.h */; };
+		E3A7DC9027BEF8EA004E76E9 /* pas_thread_suspend_lock.c in Sources */ = {isa = PBXBuildFile; fileRef = E3A7DC8E27BEF8EA004E76E9 /* pas_thread_suspend_lock.c */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXContainerItemProxy section */
@@ -739,10 +739,8 @@
 		0F14870D269B7518006887A9 /* pas_compact_segregated_exclusive_view_ptr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pas_compact_segregated_exclusive_view_ptr.h; sourceTree = "<group>"; };
 		0F14870E269B7518006887A9 /* pas_heap_runtime_config.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pas_heap_runtime_config.c; sourceTree = "<group>"; };
 		0F14870F269B7518006887A9 /* pas_compact_segregated_size_directory_ptr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pas_compact_segregated_size_directory_ptr.h; sourceTree = "<group>"; };
-		0F14871A269F5FCA006887A9 /* pas_local_view_cache_node.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pas_local_view_cache_node.h; sourceTree = "<group>"; };
 		0F14871B269F5FCA006887A9 /* pas_local_view_cache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pas_local_view_cache.c; sourceTree = "<group>"; };
 		0F14871C269F5FCA006887A9 /* pas_segregated_size_directory_creation_mode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pas_segregated_size_directory_creation_mode.h; sourceTree = "<group>"; };
-		0F14871D269F5FCA006887A9 /* pas_local_view_cache_node.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pas_local_view_cache_node.c; sourceTree = "<group>"; };
 		0F14871E269F5FCA006887A9 /* pas_thread_local_cache_layout_node_kind.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pas_thread_local_cache_layout_node_kind.h; sourceTree = "<group>"; };
 		0F1518FC23441E3200832B5C /* pas_has_object.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pas_has_object.h; sourceTree = "<group>"; };
 		0F18E63C2628BFB600F6903D /* pas_shared_page_directory_by_size.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pas_shared_page_directory_by_size.h; sourceTree = "<group>"; };
@@ -1270,6 +1268,8 @@
 		2C971CFD278E136300C9E129 /* pas_lenient_compact_ptr_inlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pas_lenient_compact_ptr_inlines.h; sourceTree = "<group>"; };
 		2CB9B152278F6C85003A8C1B /* LotsOfHeapsAndThreads.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LotsOfHeapsAndThreads.cpp; sourceTree = "<group>"; };
 		2CE2AE34275A953E00D02BBC /* BitfitTests.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BitfitTests.cpp; sourceTree = "<group>"; };
+		E3A7DC8D27BEF8EA004E76E9 /* pas_thread_suspend_lock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pas_thread_suspend_lock.h; sourceTree = "<group>"; };
+		E3A7DC8E27BEF8EA004E76E9 /* pas_thread_suspend_lock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pas_thread_suspend_lock.c; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -1708,8 +1708,6 @@
 				0F45D5A826AB731400C35D93 /* pas_local_allocator_scavenger_data.h */,
 				0FDBB07122B875A6006BA5FC /* pas_local_allocator.c */,
 				0FDBB07222B875A6006BA5FC /* pas_local_allocator.h */,
-				0F14871D269F5FCA006887A9 /* pas_local_view_cache_node.c */,
-				0F14871A269F5FCA006887A9 /* pas_local_view_cache_node.h */,
 				0F14871B269F5FCA006887A9 /* pas_local_view_cache.c */,
 				0F14870C269B7518006887A9 /* pas_local_view_cache.h */,
 				0FEA45BA236CD5AC00B5A375 /* pas_lock_free_read_ptr_ptr_hashtable.c */,
@@ -1872,6 +1870,8 @@
 				0F7F51BD23159EC0007552AE /* pas_thread_local_cache_node.h */,
 				0FC681C9210F7C9F003C6A13 /* pas_thread_local_cache.c */,
 				0FC681C4210F7C9E003C6A13 /* pas_thread_local_cache.h */,
+				E3A7DC8E27BEF8EA004E76E9 /* pas_thread_suspend_lock.c */,
+				E3A7DC8D27BEF8EA004E76E9 /* pas_thread_suspend_lock.h */,
 				0F6D547123C573E000F40DBB /* pas_tiny_large_map_entry.h */,
 				0F31A66923E8E594002C0CA3 /* pas_tree_direction.h */,
 				0F8A800C25CF64C900790B4A /* pas_tri_state.h */,
@@ -2214,7 +2214,6 @@
 				0FE7EE0E22960142004F4166 /* pas_local_allocator_result.h in Headers */,
 				0F45D5AB26AB731400C35D93 /* pas_local_allocator_scavenger_data.h in Headers */,
 				0F148712269B7518006887A9 /* pas_local_view_cache.h in Headers */,
-				0F14871F269F5FCA006887A9 /* pas_local_view_cache_node.h in Headers */,
 				0FE7EE2122960142004F4166 /* pas_lock.h in Headers */,
 				0FEA45BD236CD5AC00B5A375 /* pas_lock_free_read_ptr_ptr_hashtable.h in Headers */,
 				0F9E945923452262009FAFDD /* pas_log.h in Headers */,
@@ -2290,6 +2289,7 @@
 				0F083F5A22C2979B00F3CDB3 /* pas_segregated_page_config_utils_inlines.h in Headers */,
 				0F9A1CEB2559961700C8D11B /* pas_segregated_page_config_variant.h in Headers */,
 				0FC4EC792351707B00B710A3 /* pas_segregated_page_emptiness_kind.h in Headers */,
+				E3A7DC8F27BEF8EA004E76E9 /* pas_thread_suspend_lock.h in Headers */,
 				0FF8D62922C166F500EC72FE /* pas_segregated_page_inlines.h in Headers */,
 				0FD48B3523A9ABB30026C46D /* pas_segregated_partial_view.h in Headers */,
 				0FD48B6523A9ABB30026C46D /* pas_segregated_partial_view_inlines.h in Headers */,
@@ -2727,7 +2727,6 @@
 				0FDBB07422B875A6006BA5FC /* pas_local_allocator.c in Sources */,
 				0F45D5AA26AB731400C35D93 /* pas_local_allocator_scavenger_data.c in Sources */,
 				0F148720269F5FCA006887A9 /* pas_local_view_cache.c in Sources */,
-				0F148722269F5FCA006887A9 /* pas_local_view_cache_node.c in Sources */,
 				0F04C21F2460DB6F001D31F0 /* pas_lock.c in Sources */,
 				0FEA45BC236CD5AC00B5A375 /* pas_lock_free_read_ptr_ptr_hashtable.c in Sources */,
 				0F9E945823452262009FAFDD /* pas_log.c in Sources */,
@@ -2764,6 +2763,7 @@
 				0FD48B5C23A9ABB30026C46D /* pas_segregated_size_directory.c in Sources */,
 				0FD48B3623A9ABB30026C46D /* pas_segregated_view.c in Sources */,
 				0F18E63F2628BFB700F6903D /* pas_shared_page_directory_by_size.c in Sources */,
+				E3A7DC9027BEF8EA004E76E9 /* pas_thread_suspend_lock.c in Sources */,
 				0F6D564623CAA1BA00F40DBB /* pas_simple_free_heap_helpers.c in Sources */,
 				0FF08F3E22A5DC6900386575 /* pas_simple_large_free_heap.c in Sources */,
 				2C11E88F2728A783002162D0 /* pas_simple_type.c in Sources */,

Modified: branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_designated_intrinsic_heap.c (290856 => 290857)


--- branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_designated_intrinsic_heap.c	2022-03-05 01:06:41 UTC (rev 290856)
+++ branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_designated_intrinsic_heap.c	2022-03-05 01:44:20 UTC (rev 290857)
@@ -63,11 +63,12 @@
 
     PAS_ASSERT(designated_begin == data->next_index_to_set);
 
-    if (pas_thread_local_cache_layout_last_node) {
+    pas_heap_lock_assert_held();
+
+    if (pas_thread_local_cache_layout_get_last_node()) {
         PAS_ASSERT(
             size
-            > pas_thread_local_cache_layout_node_get_directory(
-                pas_thread_local_cache_layout_last_node)->object_size);
+            > pas_thread_local_cache_layout_node_get_directory(pas_thread_local_cache_layout_get_last_node())->object_size);
     } else
         PAS_ASSERT(!designated_begin);
 
@@ -107,10 +108,9 @@
             
             pas_segregated_size_directory_create_tlc_allocator(directory);
 
-            PAS_ASSERT(
-                pas_segregated_size_directory_data_ptr_load(&directory->data)->allocator_index
-                == target_allocator_index);
+            PAS_ASSERT(directory->allocator_index == target_allocator_index);
         } else {
+            pas_thread_local_cache_layout_node last_node;
             pas_allocator_index resulting_index;
             
             PAS_ASSERT(directory);
@@ -117,13 +117,11 @@
             
             resulting_index = pas_thread_local_cache_layout_duplicate(directory);
             PAS_ASSERT(resulting_index == target_allocator_index);
-            PAS_ASSERT(pas_thread_local_cache_layout_node_get_directory(
-                           pas_thread_local_cache_layout_last_node) == directory);
-            PAS_ASSERT(pas_thread_local_cache_layout_node_get_allocator_index_for_allocator(
-                           pas_thread_local_cache_layout_last_node) == target_allocator_index);
-            PAS_ASSERT(
-                pas_segregated_size_directory_data_ptr_load(&directory->data)->allocator_index
-                == PAS_LOCAL_ALLOCATOR_UNSELECTED_NUM_INDICES + designated_begin * data->num_allocator_indices);
+
+            last_node = pas_thread_local_cache_layout_get_last_node();
+            PAS_ASSERT(pas_thread_local_cache_layout_node_get_directory(last_node) == directory);
+            PAS_ASSERT(pas_thread_local_cache_layout_node_get_allocator_index_for_allocator(last_node) == target_allocator_index);
+            PAS_ASSERT(directory->allocator_index == PAS_LOCAL_ALLOCATOR_UNSELECTED_NUM_INDICES + designated_begin * data->num_allocator_indices);
         }
     }
 

Modified: branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_enumerate_segregated_heaps.c (290856 => 290857)


--- branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_enumerate_segregated_heaps.c	2022-03-05 01:06:41 UTC (rev 290856)
+++ branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_enumerate_segregated_heaps.c	2022-03-05 01:44:20 UTC (rev 290857)
@@ -33,7 +33,6 @@
 #include "pas_enumerator_internal.h"
 #include "pas_full_alloc_bits.h"
 #include "pas_hashtable.h"
-#include "pas_local_view_cache_node.h"
 #include "pas_ptr_hash_set.h"
 #include "pas_redundant_local_allocator_node.h"
 #include "pas_root.h"
@@ -43,6 +42,7 @@
 #include "pas_segregated_shared_handle.h"
 #include "pas_segregated_shared_view.h"
 #include "pas_shared_handle_or_page_boundary_inlines.h"
+#include "pas_thread_local_cache_layout.h"
 #include "pas_thread_local_cache_node.h"
 
 static const bool verbose = false;
@@ -629,7 +629,7 @@
 {
     pas_thread_local_cache_node** tlc_node_first_ptr;
     pas_thread_local_cache_node* tlc_node;
-    pas_thread_local_cache_layout_node* tlc_layout_first_node_ptr;
+    pas_thread_local_cache_layout_segment** tlc_layout_first_segment_ptr;
     enumeration_context context;
     pas_baseline_allocator** baseline_allocator_table_ptr;
     size_t index;
@@ -644,15 +644,12 @@
     if (!tlc_node_first_ptr)
         return false;
 
-    tlc_layout_first_node_ptr = pas_enumerator_read(enumerator,
-                                                    enumerator->root->thread_local_cache_layout_first_node,
-                                                    sizeof(pas_thread_local_cache_layout_node));
-    if (!tlc_layout_first_node_ptr)
+    tlc_layout_first_segment_ptr = pas_enumerator_read(enumerator, enumerator->root->thread_local_cache_layout_first_segment, sizeof(pas_thread_local_cache_layout_segment*));
+    if (!tlc_layout_first_segment_ptr)
         return false;
 
     for (tlc_node = *tlc_node_first_ptr; tlc_node; tlc_node = tlc_node->next) {
         pas_thread_local_cache* tlc;
-        pas_thread_local_cache_layout_node layout_node;
         unsigned index;
         
         tlc_node = pas_enumerator_read(enumerator,
@@ -687,58 +684,78 @@
             }
         }
 
-        layout_node = pas_enumerator_read_compact(enumerator, *tlc_layout_first_node_ptr);
-        while (layout_node) {
-            bool has_allocator;
-            unsigned allocator_index;
-            
-            if (pas_is_wrapped_segregated_size_directory(layout_node)) {
-                pas_segregated_size_directory* directory;
-                pas_segregated_size_directory_data* data;
+        if (*tlc_layout_first_segment_ptr) {
+            pas_thread_local_cache_layout_segment** tlc_layout_segment_ptr;
+            uintptr_t node_index = 0;
+            pas_thread_local_cache_layout_node layout_node;
+            pas_compact_atomic_thread_local_cache_layout_node* layout_node_ptr;
 
-                directory = pas_unwrap_segregated_size_directory(layout_node);
+            tlc_layout_segment_ptr = tlc_layout_first_segment_ptr;
 
-                data = ""
-                    enumerator, &directory->data);
+            layout_node_ptr = pas_enumerator_read(enumerator, &((*tlc_layout_segment_ptr)->nodes[node_index]), sizeof(pas_compact_atomic_thread_local_cache_layout_node));
+            if (!layout_node_ptr)
+                return false;
+            layout_node = pas_compact_atomic_thread_local_cache_layout_node_load_remote(enumerator, layout_node_ptr);
+            while (1) {
+                bool has_allocator;
+                unsigned allocator_index;
 
-                layout_node = pas_compact_atomic_thread_local_cache_layout_node_load_remote(
-                    enumerator, &data->next_for_layout);
+                if (!layout_node) {
+                    tlc_layout_segment_ptr = pas_enumerator_read(enumerator, &((*tlc_layout_segment_ptr)->next), sizeof(pas_thread_local_cache_layout_segment*));
+                    if (!tlc_layout_segment_ptr)
+                        return false;
+                    if (!*tlc_layout_segment_ptr)
+                        break;
+                    node_index = 0;
+                    layout_node_ptr = pas_enumerator_read(enumerator, &((*tlc_layout_segment_ptr)->nodes[node_index]), sizeof(pas_compact_atomic_thread_local_cache_layout_node));
+                    if (!layout_node_ptr)
+                        return false;
+                    layout_node = pas_compact_atomic_thread_local_cache_layout_node_load_remote(enumerator, layout_node_ptr);
+                    if (!layout_node)
+                        break;
+                }
+                
+                if (pas_is_wrapped_segregated_size_directory(layout_node)) {
+                    pas_segregated_size_directory* directory;
 
-                allocator_index = data->allocator_index;
-                has_allocator = true;
-            } else if (pas_is_wrapped_redundant_local_allocator_node(layout_node)) {
-                pas_redundant_local_allocator_node* redundant_node;
+                    directory = pas_unwrap_segregated_size_directory(layout_node);
 
-                redundant_node = pas_unwrap_redundant_local_allocator_node(layout_node);
+                    allocator_index = directory->allocator_index;
+                    has_allocator = true;
+                } else if (pas_is_wrapped_redundant_local_allocator_node(layout_node)) {
+                    pas_redundant_local_allocator_node* redundant_node;
 
-                layout_node = pas_compact_atomic_thread_local_cache_layout_node_load_remote(
-                    enumerator, &redundant_node->next);
+                    redundant_node = pas_unwrap_redundant_local_allocator_node(layout_node);
 
-                allocator_index = redundant_node->allocator_index;
-                has_allocator = true;
-            } else {
-                pas_local_view_cache_node* cache_node;
-                
-                PAS_ASSERT(pas_is_wrapped_local_view_cache_node(layout_node));
+                    allocator_index = redundant_node->allocator_index;
+                    has_allocator = true;
+                } else {
+                    pas_segregated_size_directory* directory;
+                    
+                    PAS_ASSERT(pas_is_wrapped_local_view_cache_node(layout_node));
 
-                cache_node = pas_unwrap_local_view_cache_node(layout_node);
+                    directory = pas_unwrap_local_view_cache_node(layout_node);
 
-                layout_node = pas_compact_atomic_thread_local_cache_layout_node_load_remote(
-                    enumerator, &cache_node->next);
+                    allocator_index = 0;
+                    has_allocator = false;
+                }
 
-                allocator_index = 0;
-                has_allocator = false;
-            }
+                if (has_allocator) {
+                    pas_local_allocator* allocator;
+                    
+                    if (!allocator_index || allocator_index >= tlc->allocator_index_upper_bound)
+                        break;
 
-            if (has_allocator) {
-                pas_local_allocator* allocator;
-                
-                if (!allocator_index || allocator_index >= tlc->allocator_index_upper_bound)
-                    break;
+                    allocator = pas_thread_local_cache_get_local_allocator_direct(tlc, allocator_index);
+                    
+                    consider_allocator(enumerator, &context, allocator);
+                }
 
-                allocator = pas_thread_local_cache_get_local_allocator_direct(tlc, allocator_index);
-                
-                consider_allocator(enumerator, &context, allocator);
+                ++node_index;
+                layout_node_ptr = pas_enumerator_read(enumerator, &((*tlc_layout_segment_ptr)->nodes[node_index]), sizeof(pas_compact_atomic_thread_local_cache_layout_node));
+                if (!layout_node_ptr)
+                    return false;
+                layout_node = pas_compact_atomic_thread_local_cache_layout_node_load_remote(enumerator, layout_node_ptr);
             }
         }
     }

Deleted: branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_local_view_cache_node.c (290856 => 290857)


--- branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_local_view_cache_node.c	2022-03-05 01:06:41 UTC (rev 290856)
+++ branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_local_view_cache_node.c	2022-03-05 01:44:20 UTC (rev 290857)
@@ -1,50 +0,0 @@
-/*
- * Copyright (c) 2021 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-#include "pas_config.h"
-
-#if LIBPAS_ENABLED
-
-#include "pas_local_view_cache_node.h"
-
-#include "pas_immortal_heap.h"
-
-pas_local_view_cache_node*
-pas_local_view_cache_node_create(pas_segregated_size_directory* directory)
-{
-    pas_local_view_cache_node* result;
-
-    result = pas_immortal_heap_allocate(
-        sizeof(pas_local_view_cache_node),
-        "pas_local_view_cache_node",
-        pas_object_allocation);
-
-    pas_compact_atomic_thread_local_cache_layout_node_store(&result->next, NULL);
-    pas_compact_segregated_size_directory_ptr_store(&result->directory, directory);
-
-    return result;
-}
-
-#endif /* LIBPAS_ENABLED */

Deleted: branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_local_view_cache_node.h (290856 => 290857)


--- branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_local_view_cache_node.h	2022-03-05 01:06:41 UTC (rev 290856)
+++ branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_local_view_cache_node.h	2022-03-05 01:44:20 UTC (rev 290857)
@@ -1,49 +0,0 @@
-/*
- * Copyright (c) 2021 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-#ifndef PAS_LOCAL_VIEW_CACHE_NODE_H
-#define PAS_LOCAL_VIEW_CACHE_NODE_H
-
-#include "pas_compact_segregated_size_directory_ptr.h"
-#include "pas_compact_atomic_thread_local_cache_layout_node.h"
-#include "pas_allocator_index.h"
-
-PAS_BEGIN_EXTERN_C;
-
-struct pas_local_view_cache_node;
-typedef struct pas_local_view_cache_node pas_local_view_cache_node;
-
-struct pas_local_view_cache_node {
-    pas_compact_atomic_thread_local_cache_layout_node next;
-    pas_compact_segregated_size_directory_ptr directory;
-};
-
-PAS_API pas_local_view_cache_node*
-pas_local_view_cache_node_create(pas_segregated_size_directory* directory);
-
-PAS_END_EXTERN_C;
-
-#endif /* PAS_LOCAL_VIEW_CACHE_NODE_H */
-

Modified: branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_redundant_local_allocator_node.c (290856 => 290857)


--- branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_redundant_local_allocator_node.c	2022-03-05 01:06:41 UTC (rev 290856)
+++ branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_redundant_local_allocator_node.c	2022-03-05 01:44:20 UTC (rev 290857)
@@ -41,7 +41,6 @@
         "pas_redundant_local_allocator_node",
         pas_object_allocation);
 
-    pas_compact_atomic_thread_local_cache_layout_node_store(&result->next, NULL);
     pas_compact_segregated_size_directory_ptr_store(&result->directory, directory);
     result->allocator_index = 0;
 

Modified: branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_redundant_local_allocator_node.h (290856 => 290857)


--- branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_redundant_local_allocator_node.h	2022-03-05 01:06:41 UTC (rev 290856)
+++ branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_redundant_local_allocator_node.h	2022-03-05 01:44:20 UTC (rev 290857)
@@ -36,7 +36,6 @@
 typedef struct pas_redundant_local_allocator_node pas_redundant_local_allocator_node;
 
 struct pas_redundant_local_allocator_node {
-    pas_compact_atomic_thread_local_cache_layout_node next;
     pas_compact_segregated_size_directory_ptr directory;
     pas_allocator_index allocator_index;
 };

Modified: branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_root.c (290856 => 290857)


--- branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_root.c	2022-03-05 01:06:41 UTC (rev 290856)
+++ branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_root.c	2022-03-05 01:44:20 UTC (rev 290857)
@@ -95,7 +95,7 @@
         &pas_large_heap_physical_page_sharing_cache_page_list;
     root->payload_reservation_page_list = &pas_payload_reservation_page_list;
     root->thread_local_cache_node_first = &pas_thread_local_cache_node_first;
-    root->thread_local_cache_layout_first_node = &pas_thread_local_cache_layout_first_node;
+    root->thread_local_cache_layout_first_segment = &pas_thread_local_cache_layout_first_segment;
     root->all_heaps_first_heap = &pas_all_heaps_first_heap;
     
     root->num_static_heaps = 0;

Modified: branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_root.h (290856 => 290857)


--- branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_root.h	2022-03-05 01:06:41 UTC (rev 290856)
+++ branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_root.h	2022-03-05 01:44:20 UTC (rev 290857)
@@ -61,6 +61,7 @@
 typedef struct pas_small_large_map_hashtable pas_small_large_map_hashtable;
 typedef struct pas_small_large_map_hashtable_in_flux_stash pas_small_large_map_hashtable_in_flux_stash;
 typedef struct pas_thread_local_cache_node pas_thread_local_cache_node;
+typedef struct pas_thread_local_cache_layout_segment pas_thread_local_cache_layout_segment;
 typedef struct pas_tiny_large_map_hashtable pas_tiny_large_map_hashtable;
 typedef struct pas_tiny_large_map_hashtable_in_flux_stash pas_tiny_large_map_hashtable_in_flux_stash;
 typedef struct pas_tiny_large_map_second_level_hashtable_in_flux_stash pas_tiny_large_map_second_level_hashtable_in_flux_stash;
@@ -76,7 +77,7 @@
     pas_enumerable_range_list* large_heap_physical_page_sharing_cache_page_list;
     pas_enumerable_range_list* payload_reservation_page_list;
     pas_thread_local_cache_node** thread_local_cache_node_first;
-    pas_thread_local_cache_layout_node* thread_local_cache_layout_first_node;
+    pas_thread_local_cache_layout_segment** thread_local_cache_layout_first_segment;
     pas_heap** all_heaps_first_heap;
     pas_heap** static_heaps;
     size_t num_static_heaps;

Modified: branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_segregated_heap.c (290856 => 290857)


--- branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_segregated_heap.c	2022-03-05 01:06:41 UTC (rev 290856)
+++ branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_segregated_heap.c	2022-03-05 01:44:20 UTC (rev 290857)
@@ -674,15 +674,10 @@
          directory = pas_compact_atomic_segregated_size_directory_ptr_load(&directory->next_for_heap)) {
         size_t index;
         pas_allocator_index allocator_index;
-        pas_segregated_size_directory_data* data;
         size_t extra_index_for_allocator;
         bool have_extra_index_for_allocator;
 
-        data = ""
-        if (data)
-            allocator_index = data->allocator_index;
-        else
-            allocator_index = 0;
+        allocator_index = directory->allocator_index;
 
         PAS_ASSERT(allocator_index != (pas_allocator_index)UINT_MAX);
 
@@ -736,14 +731,9 @@
          (directory = size_directory_min_heap_take_min(&min_heap));
          medium_tuple_index++) {
         pas_segregated_heap_medium_directory_tuple tuple;
-        pas_segregated_size_directory_data* data;
-        
+
         pas_compact_atomic_segregated_size_directory_ptr_store(&tuple.directory, directory);
-        data = ""
-        if (data)
-            tuple.allocator_index = data->allocator_index;
-        else
-            tuple.allocator_index = 0;
+        tuple.allocator_index = directory->allocator_index;
         PAS_ASSERT(tuple.allocator_index != (pas_allocator_index)UINT_MAX);
         tuple.begin_index = pas_segregated_size_directory_min_index(directory);
         PAS_ASSERT(tuple.begin_index);
@@ -865,8 +855,7 @@
     if (verbose)
         pas_log("index = %zu\n", index);
 
-    allocator_index =
-        pas_segregated_size_directory_data_ptr_load(&directory->data)->allocator_index;
+    allocator_index = directory->allocator_index;
     PAS_ASSERT(allocator_index);
     PAS_ASSERT((pas_allocator_index)allocator_index == allocator_index);
     PAS_ASSERT(allocator_index < (unsigned)(pas_allocator_index)UINT_MAX);

Modified: branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_segregated_size_directory.c (290856 => 290857)


--- branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_segregated_size_directory.c	2022-03-05 01:06:41 UTC (rev 290856)
+++ branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_segregated_size_directory.c	2022-03-05 01:44:20 UTC (rev 290857)
@@ -117,6 +117,7 @@
         pas_segregated_size_directory_encode_stuff(2 * PAS_NUM_BASELINE_ALLOCATORS, UINT_MAX);
     
     result->view_cache_index = (pas_allocator_index)UINT_MAX;
+    result->allocator_index = 0;
     
     pas_segregated_size_directory_data_ptr_store(&result->data, NULL);
 
@@ -204,8 +205,6 @@
     data->offset_from_page_boundary_to_first_object = 0;
     data->offset_from_page_boundary_to_end_of_last_object = 0;
     data->full_num_non_empty_words = 0;
-    data->allocator_index = 0;
-    pas_compact_atomic_thread_local_cache_layout_node_store(&data->next_for_layout, NULL);
 
     pas_fence();
 
@@ -233,24 +232,22 @@
 void pas_segregated_size_directory_create_tlc_allocator(
     pas_segregated_size_directory* directory)
 {
-    pas_segregated_size_directory_data* data;
-    
     pas_heap_lock_assert_held();
 
     if (pas_segregated_page_config_kind_is_utility(directory->base.page_config_kind))
         return;
 
-    data = "" pas_lock_is_held);
+    pas_segregated_size_directory_ensure_data(directory, pas_lock_is_held);
 
-    if (data->allocator_index) {
-        PAS_ASSERT(data->allocator_index != (pas_allocator_index)UINT_MAX);
+    if (directory->allocator_index) {
+        PAS_ASSERT(directory->allocator_index != (pas_allocator_index)UINT_MAX);
         return;
     }
     
     pas_thread_local_cache_layout_add(directory);
 
-    PAS_ASSERT(data->allocator_index);
-    PAS_ASSERT(data->allocator_index < (pas_allocator_index)UINT_MAX);
+    PAS_ASSERT(directory->allocator_index);
+    PAS_ASSERT(directory->allocator_index < (pas_allocator_index)UINT_MAX);
 }
 
 void pas_segregated_size_directory_create_tlc_view_cache(
@@ -947,7 +944,7 @@
     
     tlc_result = pas_thread_local_cache_get_local_allocator_for_initialized_index(
         pas_thread_local_cache_get(config),
-        pas_segregated_size_directory_data_ptr_load_non_null(&directory->data)->allocator_index,
+        directory->allocator_index,
         pas_lock_is_not_held);
     
     PAS_ASSERT(tlc_result.did_succeed);

Modified: branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_segregated_size_directory.h (290856 => 290857)


--- branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_segregated_size_directory.h	2022-03-05 01:06:41 UTC (rev 290856)
+++ branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_segregated_size_directory.h	2022-03-05 01:44:20 UTC (rev 290857)
@@ -84,6 +84,9 @@
 
     pas_allocator_index view_cache_index; /* This could be in the size_directory_data but we put it here
                                              because it takes less space to put it here. */
+
+    pas_allocator_index allocator_index; /* This could be in the size_directory_data but we put it here
+                                            because it takes less space to put it here. */
     
     pas_segregated_size_directory_data_ptr data;
 
@@ -95,12 +98,9 @@
     unsigned offset_from_page_boundary_to_first_object; /* Cached to make refill fast. */
     unsigned offset_from_page_boundary_to_end_of_last_object; /* Cached to make refill fast. */
     
-    pas_allocator_index allocator_index;
-    
     uint8_t full_num_non_empty_words;
 
     pas_compact_tagged_unsigned_ptr full_alloc_bits; /* Precomputed alloc bits in the case that a page is empty. */
-    pas_compact_atomic_thread_local_cache_layout_node next_for_layout;
 };
 
 struct pas_extended_segregated_size_directory_data {
@@ -300,19 +300,13 @@
 static inline bool pas_segregated_size_directory_has_tlc_allocator(
     pas_segregated_size_directory* directory)
 {
-    pas_segregated_size_directory_data* data;
-    data = ""
-    return data && data->allocator_index;
+    return directory->allocator_index;
 }
 
 static inline pas_allocator_index pas_segregated_size_directory_get_tlc_allocator_index(
     pas_segregated_size_directory* directory)
 {
-    pas_segregated_size_directory_data* data;
-    data = ""
-    if (data)
-        return data->allocator_index;
-    return 0;
+    return directory->allocator_index;
 }
 
 /* Call with heap lock held. */

Modified: branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_thread_local_cache.c (290856 => 290857)


--- branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_thread_local_cache.c	2022-03-05 01:06:41 UTC (rev 290856)
+++ branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_thread_local_cache.c	2022-03-05 01:44:20 UTC (rev 290857)
@@ -689,13 +689,17 @@
 
         if (allocator_action != pas_allocator_scavenge_no_action) {
             bool did_suspend;
+            pas_thread_local_cache_layout_segment* segment;
             pas_thread_local_cache_layout_node layout_node;
+            uintptr_t node_index;
             
             did_suspend = false;
 
             PAS_UNUSED_PARAM(did_suspend);
 
-            for (PAS_THREAD_LOCAL_CACHE_LAYOUT_EACH_ALLOCATOR(layout_node)) {
+            segment = pas_thread_local_cache_layout_first_segment;
+            node_index = 0;
+            for (PAS_THREAD_LOCAL_CACHE_LAYOUT_EACH_ALLOCATOR_WITH_SEGMENT_AND_INDEX(layout_node, segment, node_index)) {
                 pas_allocator_index allocator_index;
                 pas_local_allocator_scavenger_data* scavenger_data;
 

Modified: branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_thread_local_cache_layout.c (290856 => 290857)


--- branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_thread_local_cache_layout.c	2022-03-05 01:06:41 UTC (rev 290856)
+++ branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_thread_local_cache_layout.c	2022-03-05 01:44:20 UTC (rev 290857)
@@ -31,13 +31,15 @@
 
 #include "pas_heap_lock.h"
 #include "pas_large_utility_free_heap.h"
-#include "pas_local_view_cache_node.h"
 #include "pas_redundant_local_allocator_node.h"
 #include "pas_segregated_size_directory_inlines.h"
+#include "pas_utility_heap.h"
 #include "pas_utils.h"
 
-pas_thread_local_cache_layout_node pas_thread_local_cache_layout_first_node = NULL;
-pas_thread_local_cache_layout_node pas_thread_local_cache_layout_last_node = NULL;
+pas_thread_local_cache_layout_segment* pas_thread_local_cache_layout_first_segment = NULL;
+static pas_thread_local_cache_layout_segment* pas_thread_local_cache_layout_last_segment = NULL;
+static unsigned pas_thread_local_cache_layout_last_segment_size = 0;
+
 pas_allocator_index pas_thread_local_cache_layout_next_allocator_index =
     PAS_LOCAL_ALLOCATOR_UNSELECTED_NUM_INDICES;
 
@@ -62,8 +64,6 @@
         break;
     }
 
-    PAS_ASSERT(!pas_thread_local_cache_layout_node_get_next(node));
-    
     result = pas_thread_local_cache_layout_next_allocator_index;
 
     PAS_ASSERT(result < (pas_allocator_index)UINT_MAX);
@@ -81,18 +81,30 @@
         &pas_thread_local_cache_layout_next_allocator_index);
     PAS_ASSERT(!did_overflow);
 
-    pas_fence();
-    
-    if (!pas_thread_local_cache_layout_first_node) {
-        PAS_ASSERT(!pas_thread_local_cache_layout_last_node);
-        PAS_ASSERT(result == PAS_LOCAL_ALLOCATOR_UNSELECTED_NUM_INDICES);
-        pas_thread_local_cache_layout_first_node = node;
-        pas_thread_local_cache_layout_last_node = node;
+    if (!pas_thread_local_cache_layout_last_segment || pas_thread_local_cache_layout_last_segment_size == PAS_THREAD_LOCAL_CACHE_LAYOUT_SEGMENT_SIZE) {
+        pas_thread_local_cache_layout_segment* segment;
+
+        segment = (pas_thread_local_cache_layout_segment*)pas_utility_heap_allocate(sizeof(pas_thread_local_cache_layout_segment), "pas_thread_local_cache_layout_segment");
+        pas_zero_memory(segment, sizeof(pas_thread_local_cache_layout_segment));
+
+        pas_compact_atomic_thread_local_cache_layout_node_store(&segment->nodes[0], node);
+        pas_thread_local_cache_layout_last_segment_size = 1;
+
+        pas_fence();
+        if (!pas_thread_local_cache_layout_last_segment) {
+            PAS_ASSERT(!pas_thread_local_cache_layout_first_segment);
+            PAS_ASSERT(result == PAS_LOCAL_ALLOCATOR_UNSELECTED_NUM_INDICES);
+            pas_thread_local_cache_layout_first_segment = segment;
+            pas_thread_local_cache_layout_last_segment = segment;
+        } else {
+            pas_thread_local_cache_layout_last_segment->next = segment;
+            pas_thread_local_cache_layout_last_segment = segment;
+        }
     } else {
-        PAS_ASSERT(pas_thread_local_cache_layout_last_node);
+        PAS_ASSERT(pas_thread_local_cache_layout_last_segment);
         PAS_ASSERT(result > PAS_LOCAL_ALLOCATOR_UNSELECTED_NUM_INDICES);
-        pas_thread_local_cache_layout_node_set_next(pas_thread_local_cache_layout_last_node, node);
-        pas_thread_local_cache_layout_last_node = node;
+        pas_fence();
+        pas_compact_atomic_thread_local_cache_layout_node_store(&pas_thread_local_cache_layout_last_segment->nodes[pas_thread_local_cache_layout_last_segment_size++], node);
     }
     
     return result;
@@ -127,11 +139,16 @@
 pas_allocator_index pas_thread_local_cache_layout_add_view_cache(
     pas_segregated_size_directory* directory)
 {
-    pas_local_view_cache_node* cache_node;
+    return pas_thread_local_cache_layout_add_node(pas_wrap_local_view_cache_node(directory));
+}
 
-    cache_node = pas_local_view_cache_node_create(directory);
-
-    return pas_thread_local_cache_layout_add_node(pas_wrap_local_view_cache_node(cache_node));
+pas_thread_local_cache_layout_node pas_thread_local_cache_layout_get_last_node()
+{
+    pas_heap_lock_assert_held();
+    if (!pas_thread_local_cache_layout_last_segment)
+        return NULL;
+    PAS_ASSERT(pas_thread_local_cache_layout_last_segment_size);
+    return pas_thread_local_cache_layout_segment_get_node(pas_thread_local_cache_layout_last_segment, pas_thread_local_cache_layout_last_segment_size - 1);
 }
 
 #endif /* LIBPAS_ENABLED */

Modified: branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_thread_local_cache_layout.h (290856 => 290857)


--- branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_thread_local_cache_layout.h	2022-03-05 01:06:41 UTC (rev 290856)
+++ branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_thread_local_cache_layout.h	2022-03-05 01:44:20 UTC (rev 290857)
@@ -27,6 +27,7 @@
 #define PAS_THREAD_LOCAL_CACHE_LAYOUT_H
 
 #include "pas_allocator_index.h"
+#include "pas_compact_atomic_thread_local_cache_layout_node.h"
 #include "pas_config.h"
 #include "pas_thread_local_cache_layout_node.h"
 #include "pas_utils.h"
@@ -33,9 +34,16 @@
 
 PAS_BEGIN_EXTERN_C;
 
-PAS_API extern pas_thread_local_cache_layout_node pas_thread_local_cache_layout_first_node;
-PAS_API extern pas_thread_local_cache_layout_node pas_thread_local_cache_layout_last_node;
+#define PAS_THREAD_LOCAL_CACHE_LAYOUT_SEGMENT_SIZE 257
+struct pas_thread_local_cache_layout_segment {
+    pas_compact_atomic_thread_local_cache_layout_node nodes[PAS_THREAD_LOCAL_CACHE_LAYOUT_SEGMENT_SIZE];
+    pas_compact_atomic_thread_local_cache_layout_node sentinel;
+    struct pas_thread_local_cache_layout_segment* next;
+};
+typedef struct pas_thread_local_cache_layout_segment pas_thread_local_cache_layout_segment;
 
+PAS_API extern pas_thread_local_cache_layout_segment* pas_thread_local_cache_layout_first_segment;
+
 /* Clients can use this to force the next call to add to go to this index. */
 PAS_API extern pas_allocator_index pas_thread_local_cache_layout_next_allocator_index;
 
@@ -51,11 +59,39 @@
 PAS_API pas_allocator_index pas_thread_local_cache_layout_add_view_cache(
     pas_segregated_size_directory* directory);
 
+PAS_API pas_thread_local_cache_layout_node pas_thread_local_cache_layout_get_last_node(void);
+
+static PAS_ALWAYS_INLINE pas_thread_local_cache_layout_node pas_thread_local_cache_layout_segment_get_node(pas_thread_local_cache_layout_segment* segment, uintptr_t index)
+{
+    if (!segment)
+        return NULL;
+    return pas_compact_atomic_thread_local_cache_layout_node_load(&segment->nodes[index]);
+}
+
+static PAS_ALWAYS_INLINE pas_thread_local_cache_layout_node pas_thread_local_cache_layout_segment_next_node(pas_thread_local_cache_layout_segment** segment, uintptr_t* index)
+{
+    PAS_TESTING_ASSERT(segment);
+    PAS_TESTING_ASSERT(*segment);
+    uintptr_t next_index = *index + 1;
+    pas_thread_local_cache_layout_node next = pas_thread_local_cache_layout_segment_get_node(*segment, next_index);
+    if (next) {
+        *index = next_index;
+        return next;
+    }
+    *segment = (*segment)->next;
+    *index = 0;
+    return pas_thread_local_cache_layout_segment_get_node(*segment, 0);
+}
+
 #define PAS_THREAD_LOCAL_CACHE_LAYOUT_EACH_ALLOCATOR(node) \
-    node = pas_thread_local_cache_layout_first_node; \
+    uintptr_t internal_node_index = 0, internal_segment = (uintptr_t)pas_thread_local_cache_layout_first_segment, internal_node = (uintptr_t)pas_thread_local_cache_layout_segment_get_node((pas_thread_local_cache_layout_segment*)internal_segment, internal_node_index); \
+    (node = ((pas_thread_local_cache_layout_node)internal_node)); \
+    internal_node = (uintptr_t)pas_thread_local_cache_layout_segment_next_node((pas_thread_local_cache_layout_segment**)&internal_segment, &internal_node_index)
+
+#define PAS_THREAD_LOCAL_CACHE_LAYOUT_EACH_ALLOCATOR_WITH_SEGMENT_AND_INDEX(node, segment, index) \
+    node = pas_thread_local_cache_layout_segment_get_node(segment, index); \
     node; \
-    node = pas_thread_local_cache_layout_node_get_next(node)
-        
+    node = pas_thread_local_cache_layout_segment_next_node(&segment, &index)
 
 PAS_END_EXTERN_C;
 

Modified: branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_thread_local_cache_layout_node.c (290856 => 290857)


--- branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_thread_local_cache_layout_node.c	2022-03-05 01:06:41 UTC (rev 290856)
+++ branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_thread_local_cache_layout_node.c	2022-03-05 01:44:20 UTC (rev 290857)
@@ -30,7 +30,6 @@
 #include "pas_thread_local_cache_layout_node.h"
 
 #include "pas_local_view_cache.h"
-#include "pas_local_view_cache_node.h"
 #include "pas_redundant_local_allocator_node.h"
 #include "pas_segregated_size_directory_inlines.h"
 
@@ -45,8 +44,7 @@
             &pas_unwrap_redundant_local_allocator_node(node)->directory);
     }
 
-    return pas_compact_segregated_size_directory_ptr_load_non_null(
-        &pas_unwrap_local_view_cache_node(node)->directory);
+    return pas_unwrap_local_view_cache_node(node);
 }
 
 pas_allocator_index
@@ -67,15 +65,13 @@
 allocator_index_ptr(pas_thread_local_cache_layout_node node)
 {
     if (pas_is_wrapped_segregated_size_directory(node)) {
-        return &pas_segregated_size_directory_data_ptr_load(
-            &pas_unwrap_segregated_size_directory(node)->data)->allocator_index;
+        return &pas_unwrap_segregated_size_directory(node)->allocator_index;
     }
 
     if (pas_is_wrapped_redundant_local_allocator_node(node))
         return &pas_unwrap_redundant_local_allocator_node(node)->allocator_index;
 
-    return &pas_compact_segregated_size_directory_ptr_load_non_null(
-        &pas_unwrap_local_view_cache_node(node)->directory)->view_cache_index;
+    return &pas_unwrap_local_view_cache_node(node)->view_cache_index;
 }
 
 pas_allocator_index
@@ -105,32 +101,6 @@
     *allocator_index_ptr(node) = index;
 }
 
-static pas_compact_atomic_thread_local_cache_layout_node*
-next_ptr(pas_thread_local_cache_layout_node node)
-{
-    if (pas_is_wrapped_segregated_size_directory(node)) {
-        return &pas_segregated_size_directory_data_ptr_load(
-            &pas_unwrap_segregated_size_directory(node)->data)->next_for_layout;
-    }
-
-    if (pas_is_wrapped_redundant_local_allocator_node(node))
-        return &pas_unwrap_redundant_local_allocator_node(node)->next;
-
-    return &pas_unwrap_local_view_cache_node(node)->next;
-}
-
-pas_thread_local_cache_layout_node
-pas_thread_local_cache_layout_node_get_next(pas_thread_local_cache_layout_node node)
-{
-    return pas_compact_atomic_thread_local_cache_layout_node_load(next_ptr(node));
-}
-
-void pas_thread_local_cache_layout_node_set_next(pas_thread_local_cache_layout_node node,
-                                                 pas_thread_local_cache_layout_node next_node)
-{
-    pas_compact_atomic_thread_local_cache_layout_node_store(next_ptr(node), next_node);
-}
-
 void pas_thread_local_cache_layout_node_construct(pas_thread_local_cache_layout_node node,
                                                   pas_thread_local_cache* cache)
 {

Modified: branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_thread_local_cache_layout_node.h (290856 => 290857)


--- branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_thread_local_cache_layout_node.h	2022-03-05 01:06:41 UTC (rev 290856)
+++ branches/safari-613-branch/Source/bmalloc/libpas/src/libpas/pas_thread_local_cache_layout_node.h	2022-03-05 01:44:20 UTC (rev 290857)
@@ -33,12 +33,10 @@
 
 PAS_BEGIN_EXTERN_C;
 
-struct pas_local_view_cache_node;
 struct pas_redundant_local_allocator_node;
 struct pas_segregated_size_directory;
 struct pas_thread_local_cache;
 struct pas_thread_local_cache_layout_node_opaque;
-typedef struct pas_local_view_cache_node pas_local_view_cache_node;
 typedef struct pas_redundant_local_allocator_node pas_redundant_local_allocator_node;
 typedef struct pas_segregated_size_directory pas_segregated_size_directory;
 typedef struct pas_thread_local_cache pas_thread_local_cache;
@@ -87,10 +85,10 @@
 }
 
 static inline pas_thread_local_cache_layout_node
-pas_wrap_local_view_cache_node(pas_local_view_cache_node* node)
+pas_wrap_local_view_cache_node(pas_segregated_size_directory* directory)
 {
     return pas_thread_local_cache_layout_node_create(
-        pas_thread_local_cache_layout_local_view_cache_node_kind, node);
+        pas_thread_local_cache_layout_local_view_cache_node_kind, directory);
 }
 
 static inline bool
@@ -128,11 +126,11 @@
     return (pas_redundant_local_allocator_node*)pas_thread_local_cache_layout_node_get_ptr(node);
 }
 
-static inline pas_local_view_cache_node*
+static inline pas_segregated_size_directory*
 pas_unwrap_local_view_cache_node(pas_thread_local_cache_layout_node node)
 {
     PAS_ASSERT(pas_is_wrapped_local_view_cache_node(node));
-    return (pas_local_view_cache_node*)pas_thread_local_cache_layout_node_get_ptr(node);
+    return (pas_segregated_size_directory*)pas_thread_local_cache_layout_node_get_ptr(node);
 }
 
 PAS_API pas_segregated_size_directory*
@@ -169,13 +167,6 @@
 pas_thread_local_cache_layout_node_set_allocator_index(pas_thread_local_cache_layout_node node,
                                                        pas_allocator_index index);
 
-PAS_API pas_thread_local_cache_layout_node
-pas_thread_local_cache_layout_node_get_next(pas_thread_local_cache_layout_node node);
-
-PAS_API void
-pas_thread_local_cache_layout_node_set_next(pas_thread_local_cache_layout_node node,
-                                            pas_thread_local_cache_layout_node next_node);
-
 PAS_API void pas_thread_local_cache_layout_node_construct(pas_thread_local_cache_layout_node node,
                                                           pas_thread_local_cache* cache);
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to