react-native-windows 0.81.32 → 0.81.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (891) hide show
  1. package/Directory.Build.props +2 -17
  2. package/Folly/ThreadNameStub.cpp +4 -6
  3. package/Microsoft.ReactNative/Fabric/Composition/BorderPrimitive.cpp +1 -1
  4. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +27 -4
  5. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +8 -4
  6. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +7 -3
  7. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +2 -8
  8. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -3
  9. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +2 -2
  10. package/PropertySheets/Bundle.props +3 -3
  11. package/PropertySheets/CIBuildOptimizations.props +2 -2
  12. package/PropertySheets/Generated/PackageVersion.g.props +3 -3
  13. package/PropertySheets/JSEngine.props +1 -1
  14. package/PropertySheets/NuGet.LockFile.props +2 -1
  15. package/PropertySheets/React.Cpp.props +4 -4
  16. package/ReactCommon/ReactCommon.vcxproj +0 -10
  17. package/ReactCommon/packages.lock.win32.json +0 -10
  18. package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +61 -6
  19. package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -37
  20. package/Scripts/Warm-RnwFeedCache.ps1 +413 -0
  21. package/Scripts/creaternwapp.cmd +5 -1
  22. package/Scripts/creaternwlib.cmd +8 -2
  23. package/Shared/Shared.vcxitems +2 -0
  24. package/{Folly → external}/.clang-format +0 -1
  25. package/external/External.vcxitems +10 -0
  26. package/external/fast-float/.syncignore +11 -0
  27. package/external/fast-float/LICENSE-APACHE +190 -0
  28. package/external/fast-float/LICENSE-BOOST +23 -0
  29. package/external/fast-float/LICENSE-MIT +27 -0
  30. package/external/fast-float/cgmanifest.json +15 -0
  31. package/external/fast-float/fast-float.vcxitems +14 -0
  32. package/external/fast-float/include/fast_float/ascii_number.h +588 -0
  33. package/external/fast-float/include/fast_float/bigint.h +638 -0
  34. package/external/fast-float/include/fast_float/constexpr_feature_detect.h +46 -0
  35. package/external/fast-float/include/fast_float/decimal_to_binary.h +212 -0
  36. package/external/fast-float/include/fast_float/digit_comparison.h +457 -0
  37. package/external/fast-float/include/fast_float/fast_float.h +59 -0
  38. package/external/fast-float/include/fast_float/fast_table.h +708 -0
  39. package/external/fast-float/include/fast_float/float_common.h +1240 -0
  40. package/external/fast-float/include/fast_float/parse_number.h +399 -0
  41. package/external/fast-float/sync-config.json +8 -0
  42. package/external/fmt/.syncignore +12 -0
  43. package/external/fmt/CONTRIBUTING.md +20 -0
  44. package/external/fmt/LICENSE +27 -0
  45. package/{fmt → external/fmt}/cgmanifest.json +1 -1
  46. package/external/fmt/fmt.vcxitems +28 -0
  47. package/external/fmt/include/fmt/args.h +228 -0
  48. package/{fmt/TEMP_UntilFmtUpdate/core.h → external/fmt/include/fmt/base.h} +1188 -1036
  49. package/external/fmt/include/fmt/chrono.h +2432 -0
  50. package/external/fmt/include/fmt/color.h +612 -0
  51. package/external/fmt/include/fmt/compile.h +529 -0
  52. package/external/fmt/include/fmt/core.h +5 -0
  53. package/external/fmt/include/fmt/format-inl.h +1928 -0
  54. package/external/fmt/include/fmt/format.h +4427 -0
  55. package/external/fmt/include/fmt/os.h +439 -0
  56. package/external/fmt/include/fmt/ostream.h +211 -0
  57. package/external/fmt/include/fmt/printf.h +656 -0
  58. package/external/fmt/include/fmt/ranges.h +882 -0
  59. package/external/fmt/include/fmt/std.h +699 -0
  60. package/external/fmt/include/fmt/xchar.h +322 -0
  61. package/external/fmt/src/fmt.cc +135 -0
  62. package/external/fmt/src/format.cc +43 -0
  63. package/external/fmt/src/os.cc +403 -0
  64. package/external/fmt/sync-config.json +8 -0
  65. package/external/folly/.syncignore +61 -0
  66. package/external/folly/LICENSE +200 -0
  67. package/{fmt → external/folly/folly}/.clang-format +0 -1
  68. package/external/folly/folly/AtomicHashArray-inl.h +546 -0
  69. package/external/folly/folly/AtomicHashArray.h +431 -0
  70. package/external/folly/folly/AtomicHashMap-inl.h +653 -0
  71. package/external/folly/folly/AtomicHashMap.h +484 -0
  72. package/external/folly/folly/AtomicIntrusiveLinkedList.h +206 -0
  73. package/external/folly/folly/AtomicLinkedList.h +110 -0
  74. package/external/folly/folly/AtomicUnorderedMap.h +522 -0
  75. package/external/folly/folly/BUCK +1631 -0
  76. package/external/folly/folly/BUILD_MODE.bzl +72 -0
  77. package/external/folly/folly/Benchmark.cpp +986 -0
  78. package/external/folly/folly/Benchmark.h +680 -0
  79. package/external/folly/folly/BenchmarkUtil.h +47 -0
  80. package/external/folly/folly/Bits.h +17 -0
  81. package/external/folly/folly/CMakeLists.txt +110 -0
  82. package/external/folly/folly/CPortability.h +338 -0
  83. package/external/folly/folly/CancellationToken-inl.h +449 -0
  84. package/external/folly/folly/CancellationToken.cpp +250 -0
  85. package/external/folly/folly/CancellationToken.h +365 -0
  86. package/external/folly/folly/Chrono.h +132 -0
  87. package/external/folly/folly/ClockGettimeWrappers.cpp +93 -0
  88. package/external/folly/folly/ClockGettimeWrappers.h +29 -0
  89. package/external/folly/folly/ConcurrentBitSet.h +157 -0
  90. package/external/folly/folly/ConcurrentLazy.h +74 -0
  91. package/external/folly/folly/ConcurrentSkipList-inl.h +341 -0
  92. package/external/folly/folly/ConcurrentSkipList.h +824 -0
  93. package/external/folly/folly/ConstructorCallbackList.h +158 -0
  94. package/external/folly/folly/Conv.h +2026 -0
  95. package/external/folly/folly/CppAttributes.h +170 -0
  96. package/external/folly/folly/CpuId.h +297 -0
  97. package/external/folly/folly/DefaultKeepAliveExecutor.h +172 -0
  98. package/external/folly/folly/Demangle.cpp +255 -0
  99. package/external/folly/folly/Demangle.h +73 -0
  100. package/external/folly/folly/DiscriminatedPtr.h +236 -0
  101. package/external/folly/folly/DynamicConverter.h +17 -0
  102. package/external/folly/folly/Exception.h +150 -0
  103. package/external/folly/folly/ExceptionString.cpp +51 -0
  104. package/external/folly/folly/ExceptionString.h +33 -0
  105. package/external/folly/folly/ExceptionWrapper-inl.h +264 -0
  106. package/external/folly/folly/ExceptionWrapper.cpp +37 -0
  107. package/external/folly/folly/ExceptionWrapper.h +377 -0
  108. package/external/folly/folly/Executor.cpp +111 -0
  109. package/external/folly/folly/Executor.h +351 -0
  110. package/external/folly/folly/Expected.h +1725 -0
  111. package/external/folly/folly/FBString.h +2888 -0
  112. package/external/folly/folly/FBVector.h +17 -0
  113. package/external/folly/folly/File.cpp +180 -0
  114. package/external/folly/folly/File.h +177 -0
  115. package/external/folly/folly/FileUtil.cpp +378 -0
  116. package/external/folly/folly/FileUtil.h +332 -0
  117. package/external/folly/folly/Fingerprint.cpp +135 -0
  118. package/external/folly/folly/Fingerprint.h +289 -0
  119. package/external/folly/folly/FixedString.h +2965 -0
  120. package/external/folly/folly/FollyMemcpy.cpp +30 -0
  121. package/external/folly/folly/FollyMemcpy.h +23 -0
  122. package/external/folly/folly/FollyMemset.cpp +29 -0
  123. package/external/folly/folly/FollyMemset.h +25 -0
  124. package/external/folly/folly/Format-inl.h +1152 -0
  125. package/external/folly/folly/Format.cpp +429 -0
  126. package/external/folly/folly/Format.h +463 -0
  127. package/external/folly/folly/FormatArg.h +285 -0
  128. package/external/folly/folly/FormatTraits.h +65 -0
  129. package/external/folly/folly/Function.h +1159 -0
  130. package/external/folly/folly/GLog.h +85 -0
  131. package/external/folly/folly/GroupVarint.cpp +153 -0
  132. package/external/folly/folly/GroupVarint.h +630 -0
  133. package/external/folly/folly/Hash.h +20 -0
  134. package/external/folly/folly/IPAddress.cpp +490 -0
  135. package/external/folly/folly/IPAddress.h +667 -0
  136. package/external/folly/folly/IPAddressException.h +82 -0
  137. package/external/folly/folly/IPAddressV4.cpp +305 -0
  138. package/external/folly/folly/IPAddressV4.h +495 -0
  139. package/external/folly/folly/IPAddressV6.cpp +541 -0
  140. package/external/folly/folly/IPAddressV6.h +627 -0
  141. package/external/folly/folly/Indestructible.h +164 -0
  142. package/external/folly/folly/IndexedMemPool.h +550 -0
  143. package/external/folly/folly/IntrusiveList.h +17 -0
  144. package/external/folly/folly/Lazy.h +142 -0
  145. package/external/folly/folly/Likely.h +76 -0
  146. package/external/folly/folly/MPMCPipeline.h +280 -0
  147. package/external/folly/folly/MPMCQueue.h +1556 -0
  148. package/external/folly/folly/MacAddress.cpp +188 -0
  149. package/external/folly/folly/MacAddress.h +260 -0
  150. package/external/folly/folly/MapUtil.h +17 -0
  151. package/external/folly/folly/Math.h +258 -0
  152. package/external/folly/folly/MaybeManagedPtr.h +120 -0
  153. package/external/folly/folly/Memory.h +900 -0
  154. package/external/folly/folly/MicroLock.cpp +76 -0
  155. package/external/folly/folly/MicroLock.h +354 -0
  156. package/external/folly/folly/MicroSpinLock.h +17 -0
  157. package/external/folly/folly/MoveWrapper.h +76 -0
  158. package/external/folly/folly/ObserverContainer.h +1026 -0
  159. package/external/folly/folly/Optional.h +743 -0
  160. package/external/folly/folly/Overload.h +325 -0
  161. package/external/folly/folly/PackedSyncPtr.h +147 -0
  162. package/external/folly/folly/Padded.h +464 -0
  163. package/external/folly/folly/Poly-inl.h +230 -0
  164. package/external/folly/folly/Poly.h +1095 -0
  165. package/external/folly/folly/PolyException.h +43 -0
  166. package/external/folly/folly/Portability.h +644 -0
  167. package/external/folly/folly/Preprocessor.h +236 -0
  168. package/external/folly/folly/ProducerConsumerQueue.h +182 -0
  169. package/external/folly/folly/RWSpinLock.h +17 -0
  170. package/external/folly/folly/Random-inl.h +86 -0
  171. package/external/folly/folly/Random.cpp +184 -0
  172. package/external/folly/folly/Random.h +434 -0
  173. package/external/folly/folly/Range.h +1772 -0
  174. package/external/folly/folly/Replaceable.h +636 -0
  175. package/external/folly/folly/ScopeGuard.cpp +29 -0
  176. package/external/folly/folly/ScopeGuard.h +420 -0
  177. package/external/folly/folly/SharedMutex.cpp +81 -0
  178. package/external/folly/folly/SharedMutex.h +1751 -0
  179. package/external/folly/folly/Singleton-inl.h +332 -0
  180. package/external/folly/folly/Singleton.cpp +512 -0
  181. package/external/folly/folly/Singleton.h +891 -0
  182. package/external/folly/folly/SingletonThreadLocal.cpp +53 -0
  183. package/external/folly/folly/SingletonThreadLocal.h +263 -0
  184. package/external/folly/folly/SocketAddress.cpp +786 -0
  185. package/external/folly/folly/SocketAddress.h +768 -0
  186. package/external/folly/folly/SpinLock.h +55 -0
  187. package/external/folly/folly/String-inl.h +668 -0
  188. package/external/folly/folly/String.cpp +777 -0
  189. package/external/folly/folly/String.h +767 -0
  190. package/external/folly/folly/Subprocess.cpp +1142 -0
  191. package/external/folly/folly/Subprocess.h +1055 -0
  192. package/external/folly/folly/Synchronized.h +1833 -0
  193. package/external/folly/folly/SynchronizedPtr.h +106 -0
  194. package/external/folly/folly/ThreadCachedInt.h +175 -0
  195. package/external/folly/folly/ThreadLocal.h +478 -0
  196. package/external/folly/folly/TimeoutQueue.cpp +78 -0
  197. package/external/folly/folly/TimeoutQueue.h +123 -0
  198. package/external/folly/folly/TokenBucket.h +673 -0
  199. package/external/folly/folly/Traits.h +1442 -0
  200. package/external/folly/folly/Try-inl.h +372 -0
  201. package/external/folly/folly/Try.cpp +23 -0
  202. package/external/folly/folly/Try.h +728 -0
  203. package/external/folly/folly/UTF8String.h +56 -0
  204. package/external/folly/folly/Unicode.cpp +201 -0
  205. package/external/folly/folly/Unicode.h +94 -0
  206. package/external/folly/folly/Unit.h +65 -0
  207. package/external/folly/folly/Uri-inl.h +101 -0
  208. package/external/folly/folly/Uri.cpp +190 -0
  209. package/external/folly/folly/Uri.h +142 -0
  210. package/external/folly/folly/Utility.h +932 -0
  211. package/external/folly/folly/VERSION +1 -0
  212. package/external/folly/folly/Varint.h +230 -0
  213. package/external/folly/folly/VirtualExecutor.h +17 -0
  214. package/external/folly/folly/algorithm/simd/BUCK +47 -0
  215. package/external/folly/folly/algorithm/simd/Contains.cpp +42 -0
  216. package/external/folly/folly/algorithm/simd/Contains.h +116 -0
  217. package/external/folly/folly/algorithm/simd/FindFixed.h +301 -0
  218. package/external/folly/folly/algorithm/simd/Ignore.h +52 -0
  219. package/external/folly/folly/algorithm/simd/Movemask.h +207 -0
  220. package/external/folly/folly/algorithm/simd/detail/BUCK +70 -0
  221. package/external/folly/folly/algorithm/simd/detail/ContainsImpl.h +91 -0
  222. package/external/folly/folly/algorithm/simd/detail/SimdAnyOf.h +83 -0
  223. package/external/folly/folly/algorithm/simd/detail/SimdForEach.h +209 -0
  224. package/external/folly/folly/algorithm/simd/detail/SimdPlatform.h +445 -0
  225. package/external/folly/folly/algorithm/simd/detail/Traits.h +125 -0
  226. package/external/folly/folly/algorithm/simd/detail/UnrollUtils.h +126 -0
  227. package/external/folly/folly/base64.h +264 -0
  228. package/external/folly/folly/chrono/BUCK +29 -0
  229. package/external/folly/folly/chrono/Clock.h +65 -0
  230. package/external/folly/folly/chrono/Conv.h +712 -0
  231. package/external/folly/folly/chrono/test/BUCK +26 -0
  232. package/external/folly/folly/chrono/test/ClockTest.cpp +68 -0
  233. package/external/folly/folly/chrono/test/ConvTest.cpp +652 -0
  234. package/external/folly/folly/concurrency/AtomicSharedPtr.h +387 -0
  235. package/external/folly/folly/concurrency/BUCK +170 -0
  236. package/external/folly/folly/concurrency/CacheLocality.h +460 -0
  237. package/external/folly/folly/concurrency/ConcurrentHashMap.h +822 -0
  238. package/external/folly/folly/concurrency/CoreCachedSharedPtr.h +232 -0
  239. package/external/folly/folly/concurrency/DeadlockDetector.cpp +27 -0
  240. package/external/folly/folly/concurrency/DeadlockDetector.h +44 -0
  241. package/external/folly/folly/concurrency/DynamicBoundedQueue.h +751 -0
  242. package/external/folly/folly/concurrency/PriorityUnboundedQueueSet.h +207 -0
  243. package/external/folly/folly/concurrency/ProcessLocalUniqueId.cpp +46 -0
  244. package/external/folly/folly/concurrency/ProcessLocalUniqueId.h +38 -0
  245. package/external/folly/folly/concurrency/SingletonRelaxedCounter.h +325 -0
  246. package/external/folly/folly/concurrency/ThreadCachedSynchronized.h +227 -0
  247. package/external/folly/folly/concurrency/UnboundedQueue.h +891 -0
  248. package/external/folly/folly/concurrency/container/BUCK +77 -0
  249. package/external/folly/folly/concurrency/container/FlatCombiningPriorityQueue.h +426 -0
  250. package/external/folly/folly/concurrency/container/LockFreeRingBuffer.h +306 -0
  251. package/external/folly/folly/concurrency/container/RelaxedConcurrentPriorityQueue.h +1212 -0
  252. package/external/folly/folly/concurrency/container/SingleWriterFixedHashMap.h +322 -0
  253. package/external/folly/folly/concurrency/container/atomic_grow_array.h +564 -0
  254. package/external/folly/folly/concurrency/container/test/BUCK +75 -0
  255. package/external/folly/folly/concurrency/container/test/FlatCombiningPriorityQueueTest.cpp +570 -0
  256. package/external/folly/folly/concurrency/container/test/LockFreeRingBufferTest.cpp +276 -0
  257. package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp +1570 -0
  258. package/external/folly/folly/concurrency/container/test/SingleWriterFixedHashMapTest.cpp +401 -0
  259. package/external/folly/folly/concurrency/container/test/atomic_grow_array_test.cpp +187 -0
  260. package/external/folly/folly/concurrency/detail/AtomicSharedPtr-detail.h +212 -0
  261. package/external/folly/folly/concurrency/detail/ConcurrentHashMap-detail.h +1911 -0
  262. package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.cpp +43 -0
  263. package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.h +190 -0
  264. package/external/folly/folly/concurrency/memory/BUCK +53 -0
  265. package/external/folly/folly/concurrency/memory/PrimaryPtr.h +338 -0
  266. package/external/folly/folly/concurrency/memory/ReadMostlySharedPtr.h +511 -0
  267. package/external/folly/folly/concurrency/memory/TLRefCount.h +228 -0
  268. package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrBenchmark.cpp +56 -0
  269. package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrTest.cpp +454 -0
  270. package/external/folly/folly/concurrency/memory/test/BUCK +95 -0
  271. package/external/folly/folly/concurrency/memory/test/PrimaryPtrTest.cpp +303 -0
  272. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrBenchmark.cpp +138 -0
  273. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrStressTest.cpp +75 -0
  274. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrTest.cpp +378 -0
  275. package/external/folly/folly/concurrency/memory/test/RefCountBenchmark.cpp +90 -0
  276. package/external/folly/folly/concurrency/memory/test/RefCountTest.cpp +168 -0
  277. package/external/folly/folly/concurrency/test/AtomicSharedPtrCounted.h +156 -0
  278. package/external/folly/folly/concurrency/test/AtomicSharedPtrPerformance.cpp +255 -0
  279. package/external/folly/folly/concurrency/test/AtomicSharedPtrTest.cpp +257 -0
  280. package/external/folly/folly/concurrency/test/BUCK +229 -0
  281. package/external/folly/folly/concurrency/test/CacheLocalityBenchmark.cpp +392 -0
  282. package/external/folly/folly/concurrency/test/CacheLocalityTest.cpp +1229 -0
  283. package/external/folly/folly/concurrency/test/ConcurrentHashMapBench.cpp +260 -0
  284. package/external/folly/folly/concurrency/test/ConcurrentHashMapTest.cpp +1242 -0
  285. package/external/folly/folly/concurrency/test/CoreCachedSharedPtrTest.cpp +408 -0
  286. package/external/folly/folly/concurrency/test/DynamicBoundedQueueTest.cpp +984 -0
  287. package/external/folly/folly/concurrency/test/PriorityUnboundedQueueSetTest.cpp +73 -0
  288. package/external/folly/folly/concurrency/test/ProcessLocalUniqueIdTest.cpp +66 -0
  289. package/external/folly/folly/concurrency/test/SingletonRelaxedCounterBench.cpp +101 -0
  290. package/external/folly/folly/concurrency/test/SingletonRelaxedCounterTest.cpp +185 -0
  291. package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedBench.cpp +76 -0
  292. package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedTest.cpp +93 -0
  293. package/external/folly/folly/concurrency/test/UnboundedQueueTest.cpp +1302 -0
  294. package/external/folly/folly/container/Access.h +57 -0
  295. package/external/folly/folly/container/Array.h +87 -0
  296. package/external/folly/folly/container/BUCK +353 -0
  297. package/external/folly/folly/container/BitIterator.h +203 -0
  298. package/external/folly/folly/container/Enumerate.h +162 -0
  299. package/external/folly/folly/container/EvictingCacheMap.h +730 -0
  300. package/external/folly/folly/container/F14.md +300 -0
  301. package/external/folly/folly/container/F14Map-fwd.h +113 -0
  302. package/external/folly/folly/container/F14Map.h +2108 -0
  303. package/external/folly/folly/container/F14Set-fwd.h +95 -0
  304. package/external/folly/folly/container/F14Set.h +1603 -0
  305. package/external/folly/folly/container/FBVector.h +1711 -0
  306. package/external/folly/folly/container/Foreach-inl.h +316 -0
  307. package/external/folly/folly/container/Foreach.h +209 -0
  308. package/external/folly/folly/container/HeterogeneousAccess-fwd.h +33 -0
  309. package/external/folly/folly/container/HeterogeneousAccess.h +171 -0
  310. package/external/folly/folly/container/IntrusiveHeap.h +268 -0
  311. package/external/folly/folly/container/IntrusiveList.h +131 -0
  312. package/external/folly/folly/container/Iterator.h +843 -0
  313. package/external/folly/folly/container/MapUtil.h +376 -0
  314. package/external/folly/folly/container/Merge.h +90 -0
  315. package/external/folly/folly/container/RegexMatchCache.cpp +521 -0
  316. package/external/folly/folly/container/RegexMatchCache.h +699 -0
  317. package/external/folly/folly/container/Reserve.h +109 -0
  318. package/external/folly/folly/container/SparseByteSet.h +123 -0
  319. package/external/folly/folly/container/View.h +81 -0
  320. package/external/folly/folly/container/WeightedEvictingCacheMap.h +651 -0
  321. package/external/folly/folly/container/detail/BUCK +115 -0
  322. package/external/folly/folly/container/detail/BitIteratorDetail.h +87 -0
  323. package/external/folly/folly/container/detail/F14Defaults.h +34 -0
  324. package/external/folly/folly/container/detail/F14IntrinsicsAvailability.h +67 -0
  325. package/external/folly/folly/container/detail/F14MapFallback.h +717 -0
  326. package/external/folly/folly/container/detail/F14Mask.h +235 -0
  327. package/external/folly/folly/container/detail/F14Policy.h +1523 -0
  328. package/external/folly/folly/container/detail/F14SetFallback.h +528 -0
  329. package/external/folly/folly/container/detail/F14Table.cpp +71 -0
  330. package/external/folly/folly/container/detail/F14Table.h +2680 -0
  331. package/external/folly/folly/container/detail/Util.h +303 -0
  332. package/external/folly/folly/container/detail/tape_detail.h +135 -0
  333. package/external/folly/folly/container/detail/test/BUCK +14 -0
  334. package/external/folly/folly/container/detail/test/F14DetailTest.cpp +47 -0
  335. package/external/folly/folly/container/heap_vector_types.h +1683 -0
  336. package/external/folly/folly/container/range_traits.h +81 -0
  337. package/external/folly/folly/container/small_vector.h +1476 -0
  338. package/external/folly/folly/container/sorted_vector_types.h +1652 -0
  339. package/external/folly/folly/container/span.h +408 -0
  340. package/external/folly/folly/container/tape.h +608 -0
  341. package/external/folly/folly/container/test/.clang-tidy +12 -0
  342. package/external/folly/folly/container/test/AccessTest.cpp +138 -0
  343. package/external/folly/folly/container/test/ArrayTest.cpp +84 -0
  344. package/external/folly/folly/container/test/BUCK +568 -0
  345. package/external/folly/folly/container/test/BitIteratorBench.cpp +112 -0
  346. package/external/folly/folly/container/test/BitIteratorTest.cpp +109 -0
  347. package/external/folly/folly/container/test/EnumerateTest.cpp +294 -0
  348. package/external/folly/folly/container/test/EvictingCacheMapBench.cpp +80 -0
  349. package/external/folly/folly/container/test/EvictingCacheMapTest.cpp +842 -0
  350. package/external/folly/folly/container/test/F14AsanSupportTest.cpp +143 -0
  351. package/external/folly/folly/container/test/F14FwdTest.cpp +37 -0
  352. package/external/folly/folly/container/test/F14InterprocessTest.cpp +404 -0
  353. package/external/folly/folly/container/test/F14MapTest.cpp +2543 -0
  354. package/external/folly/folly/container/test/F14PolicyTest.cpp +49 -0
  355. package/external/folly/folly/container/test/F14SetTest.cpp +1738 -0
  356. package/external/folly/folly/container/test/F14SmallOverheads.cpp +215 -0
  357. package/external/folly/folly/container/test/F14TestUtil.h +117 -0
  358. package/external/folly/folly/container/test/FBVectorBenchmark.cpp +380 -0
  359. package/external/folly/folly/container/test/FBVectorBenchmarks.cpp.h +100 -0
  360. package/external/folly/folly/container/test/FBVectorTest.cpp +326 -0
  361. package/external/folly/folly/container/test/FBVectorTests.cpp.h +304 -0
  362. package/external/folly/folly/container/test/ForeachBenchmark.cpp +388 -0
  363. package/external/folly/folly/container/test/ForeachTest.cpp +338 -0
  364. package/external/folly/folly/container/test/HashMapsBench.cpp +458 -0
  365. package/external/folly/folly/container/test/HeterogeneousAccessTest.cpp +242 -0
  366. package/external/folly/folly/container/test/IntrusiveHeapTest.cpp +262 -0
  367. package/external/folly/folly/container/test/IteratorTest.cpp +989 -0
  368. package/external/folly/folly/container/test/MapUtilTest.cpp +365 -0
  369. package/external/folly/folly/container/test/MergeTest.cpp +66 -0
  370. package/external/folly/folly/container/test/RegexMatchCacheTest.cpp +634 -0
  371. package/external/folly/folly/container/test/ReserveTest.cpp +173 -0
  372. package/external/folly/folly/container/test/SparseByteSetBenchmark.cpp +153 -0
  373. package/external/folly/folly/container/test/SparseByteSetTest.cpp +117 -0
  374. package/external/folly/folly/container/test/TrackingTypes.h +584 -0
  375. package/external/folly/folly/container/test/UtilTest.cpp +609 -0
  376. package/external/folly/folly/container/test/WeightedEvictingCacheMapTest.cpp +800 -0
  377. package/external/folly/folly/container/test/heap_vector_types_test.cpp +1774 -0
  378. package/external/folly/folly/container/test/range_traits_test.cpp +59 -0
  379. package/external/folly/folly/container/test/small_vector_test.cpp +1571 -0
  380. package/external/folly/folly/container/test/sorted_vector_test.cpp +1589 -0
  381. package/external/folly/folly/container/test/span_test.cpp +520 -0
  382. package/external/folly/folly/container/test/tape_bench.cpp +200 -0
  383. package/external/folly/folly/container/test/tape_test.cpp +590 -0
  384. package/external/folly/folly/defs.bzl +238 -0
  385. package/external/folly/folly/detail/AsyncTrace.cpp +36 -0
  386. package/external/folly/folly/detail/AsyncTrace.h +44 -0
  387. package/external/folly/folly/detail/AtomicHashUtils.h +42 -0
  388. package/external/folly/folly/detail/AtomicUnorderedMapUtils.h +80 -0
  389. package/external/folly/folly/detail/BUCK +406 -0
  390. package/external/folly/folly/detail/DiscriminatedPtrDetail.h +172 -0
  391. package/external/folly/folly/detail/FileUtilDetail.cpp +63 -0
  392. package/external/folly/folly/detail/FileUtilDetail.h +85 -0
  393. package/external/folly/folly/detail/FileUtilVectorDetail.h +81 -0
  394. package/external/folly/folly/detail/FingerprintPolynomial.h +132 -0
  395. package/external/folly/folly/detail/Futex-inl.h +123 -0
  396. package/external/folly/folly/detail/Futex.cpp +273 -0
  397. package/external/folly/folly/detail/Futex.h +109 -0
  398. package/external/folly/folly/detail/GroupVarintDetail.h +101 -0
  399. package/external/folly/folly/detail/IPAddress.cpp +37 -0
  400. package/external/folly/folly/detail/IPAddress.h +57 -0
  401. package/external/folly/folly/detail/IPAddressSource.h +278 -0
  402. package/external/folly/folly/detail/Iterators.h +156 -0
  403. package/external/folly/folly/detail/MPMCPipelineDetail.h +122 -0
  404. package/external/folly/folly/detail/MemoryIdler.cpp +233 -0
  405. package/external/folly/folly/detail/MemoryIdler.h +216 -0
  406. package/external/folly/folly/detail/PerfScoped.cpp +112 -0
  407. package/external/folly/folly/detail/PerfScoped.h +70 -0
  408. package/external/folly/folly/detail/PolyDetail.h +921 -0
  409. package/external/folly/folly/detail/RangeCommon.cpp +55 -0
  410. package/external/folly/folly/detail/RangeCommon.h +93 -0
  411. package/external/folly/folly/detail/RangeSse42.cpp +198 -0
  412. package/external/folly/folly/detail/RangeSse42.h +30 -0
  413. package/external/folly/folly/detail/SimpleSimdStringUtils.cpp +31 -0
  414. package/external/folly/folly/detail/SimpleSimdStringUtils.h +27 -0
  415. package/external/folly/folly/detail/SimpleSimdStringUtilsImpl.h +63 -0
  416. package/external/folly/folly/detail/Singleton.h +34 -0
  417. package/external/folly/folly/detail/SlowFingerprint.h +90 -0
  418. package/external/folly/folly/detail/SocketFastOpen.cpp +175 -0
  419. package/external/folly/folly/detail/SocketFastOpen.h +89 -0
  420. package/external/folly/folly/detail/SplitStringSimd.cpp +84 -0
  421. package/external/folly/folly/detail/SplitStringSimd.h +151 -0
  422. package/external/folly/folly/detail/SplitStringSimdImpl.h +149 -0
  423. package/external/folly/folly/detail/Sse.cpp +35 -0
  424. package/external/folly/folly/detail/Sse.h +45 -0
  425. package/external/folly/folly/detail/StaticSingletonManager.cpp +119 -0
  426. package/external/folly/folly/detail/StaticSingletonManager.h +298 -0
  427. package/external/folly/folly/detail/ThreadLocalDetail.cpp +492 -0
  428. package/external/folly/folly/detail/ThreadLocalDetail.h +800 -0
  429. package/external/folly/folly/detail/TrapOnAvx512.cpp +41 -0
  430. package/external/folly/folly/detail/TrapOnAvx512.h +21 -0
  431. package/external/folly/folly/detail/TurnSequencer.h +295 -0
  432. package/external/folly/folly/detail/TypeList.h +551 -0
  433. package/external/folly/folly/detail/UniqueInstance.cpp +136 -0
  434. package/external/folly/folly/detail/UniqueInstance.h +68 -0
  435. package/external/folly/folly/detail/base64_detail/BUCK +102 -0
  436. package/external/folly/folly/detail/base64_detail/Base64Api.cpp +40 -0
  437. package/external/folly/folly/detail/base64_detail/Base64Api.h +101 -0
  438. package/external/folly/folly/detail/base64_detail/Base64Common.h +80 -0
  439. package/external/folly/folly/detail/base64_detail/Base64Constants.h +79 -0
  440. package/external/folly/folly/detail/base64_detail/Base64HiddenConstants.h +129 -0
  441. package/external/folly/folly/detail/base64_detail/Base64SWAR.cpp +161 -0
  442. package/external/folly/folly/detail/base64_detail/Base64SWAR.h +32 -0
  443. package/external/folly/folly/detail/base64_detail/Base64Scalar.h +262 -0
  444. package/external/folly/folly/detail/base64_detail/Base64Simd.h +102 -0
  445. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.cpp +42 -0
  446. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.h +33 -0
  447. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2_Platform.h +167 -0
  448. package/external/folly/folly/detail/base64_detail/README.md +392 -0
  449. package/external/folly/folly/detail/base64_detail/tests/BUCK +36 -0
  450. package/external/folly/folly/detail/base64_detail/tests/Base64AgainstScalarTest.cpp +141 -0
  451. package/external/folly/folly/detail/base64_detail/tests/Base64PlatformTest.cpp +273 -0
  452. package/external/folly/folly/detail/base64_detail/tests/Base64SpecialCasesTest.cpp +555 -0
  453. package/external/folly/folly/detail/test/AsyncTraceTest.cpp +43 -0
  454. package/external/folly/folly/detail/test/BUCK +118 -0
  455. package/external/folly/folly/detail/test/FileUtilDetailTest.cpp +56 -0
  456. package/external/folly/folly/detail/test/PerfScopedTest.cpp +107 -0
  457. package/external/folly/folly/detail/test/SimpleSimdStringUtilsTest.cpp +92 -0
  458. package/external/folly/folly/detail/test/SplitStringSimdTest.cpp +242 -0
  459. package/external/folly/folly/detail/test/StaticSingletonManagerTest.cpp +121 -0
  460. package/external/folly/folly/detail/test/ThreadLocalBenchmark.cpp +116 -0
  461. package/external/folly/folly/detail/test/ThreadLocalDetailTest.cpp +194 -0
  462. package/external/folly/folly/detail/test/TrapOnAvx512TestNegative.cpp +29 -0
  463. package/external/folly/folly/detail/test/UniqueInstanceTest.cpp +60 -0
  464. package/external/folly/folly/detail/thread_local_globals.cpp +69 -0
  465. package/external/folly/folly/detail/thread_local_globals.h +36 -0
  466. package/external/folly/folly/dynamic-inl.h +17 -0
  467. package/external/folly/folly/dynamic.h +17 -0
  468. package/external/folly/folly/folly_extended_library.bzl +28 -0
  469. package/external/folly/folly/functional/ApplyTuple.h +204 -0
  470. package/external/folly/folly/functional/BUCK +57 -0
  471. package/external/folly/folly/functional/Invoke.h +880 -0
  472. package/external/folly/folly/functional/Partial.h +130 -0
  473. package/external/folly/folly/functional/protocol.h +203 -0
  474. package/external/folly/folly/functional/test/ApplyTupleTest.cpp +549 -0
  475. package/external/folly/folly/functional/test/BUCK +57 -0
  476. package/external/folly/folly/functional/test/InvokeTest.cpp +483 -0
  477. package/external/folly/folly/functional/test/PartialTest.cpp +141 -0
  478. package/external/folly/folly/functional/test/protocol_test.cpp +177 -0
  479. package/external/folly/folly/functional/test/traits_test.cpp +551 -0
  480. package/external/folly/folly/functional/traits.h +675 -0
  481. package/external/folly/folly/hash/BUCK +86 -0
  482. package/external/folly/folly/hash/Checksum.cpp +275 -0
  483. package/external/folly/folly/hash/Checksum.h +94 -0
  484. package/external/folly/folly/hash/FarmHash.h +46 -0
  485. package/external/folly/folly/hash/Hash.h +1045 -0
  486. package/external/folly/folly/hash/MurmurHash.h +86 -0
  487. package/external/folly/folly/hash/SpookyHashV1.cpp +391 -0
  488. package/external/folly/folly/hash/SpookyHashV1.h +307 -0
  489. package/external/folly/folly/hash/SpookyHashV2.cpp +392 -0
  490. package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/hash/SpookyHashV2.h +6 -1
  491. package/external/folly/folly/hash/detail/BUCK +26 -0
  492. package/external/folly/folly/hash/detail/ChecksumDetail.cpp +296 -0
  493. package/external/folly/folly/hash/detail/ChecksumDetail.h +137 -0
  494. package/external/folly/folly/hash/detail/Crc32CombineDetail.cpp +191 -0
  495. package/external/folly/folly/hash/detail/Crc32cDetail.cpp +303 -0
  496. package/external/folly/folly/hash/test/BUCK +132 -0
  497. package/external/folly/folly/hash/test/ChecksumBenchmark.cpp +91 -0
  498. package/external/folly/folly/hash/test/ChecksumTest.cpp +587 -0
  499. package/external/folly/folly/hash/test/FarmHashTest.cpp +41 -0
  500. package/external/folly/folly/hash/test/HashBenchmark.cpp +238 -0
  501. package/external/folly/folly/hash/test/HashTest.cpp +997 -0
  502. package/external/folly/folly/hash/test/MurmurHashTest.cpp +76 -0
  503. package/external/folly/folly/hash/test/SpookyHashV1Test.cpp +559 -0
  504. package/external/folly/folly/hash/test/SpookyHashV2Test.cpp +549 -0
  505. package/external/folly/folly/hash/test/traits_test.cpp +69 -0
  506. package/external/folly/folly/hash/traits.h +115 -0
  507. package/external/folly/folly/json/BUCK +155 -0
  508. package/external/folly/folly/json/DynamicConverter.h +464 -0
  509. package/external/folly/folly/json/DynamicParser-inl.h +316 -0
  510. package/external/folly/folly/json/DynamicParser.cpp +198 -0
  511. package/external/folly/folly/json/DynamicParser.h +394 -0
  512. package/external/folly/folly/json/JSONSchema.cpp +1030 -0
  513. package/external/folly/folly/json/JSONSchema.h +73 -0
  514. package/external/folly/folly/json/JsonMockUtil.h +73 -0
  515. package/external/folly/folly/json/JsonTestUtil.cpp +167 -0
  516. package/external/folly/folly/json/JsonTestUtil.h +88 -0
  517. package/external/folly/folly/json/bser/BUCK +24 -0
  518. package/external/folly/folly/json/bser/Bser.h +107 -0
  519. package/external/folly/folly/json/bser/Dump.cpp +253 -0
  520. package/external/folly/folly/json/bser/Load.cpp +246 -0
  521. package/external/folly/folly/json/bser/test/BUCK +14 -0
  522. package/external/folly/folly/json/bser/test/BserTest.cpp +149 -0
  523. package/external/folly/folly/json/dynamic.cpp +552 -0
  524. package/external/folly/folly/json/dynamic.h +1346 -0
  525. package/external/folly/folly/json/json.h +238 -0
  526. package/external/folly/folly/json/json_patch.cpp +325 -0
  527. package/external/folly/folly/json/json_patch.h +126 -0
  528. package/external/folly/folly/json/json_pointer.cpp +114 -0
  529. package/external/folly/folly/json/json_pointer.h +87 -0
  530. package/external/folly/folly/json/test/BUCK +147 -0
  531. package/external/folly/folly/json/test/DynamicBenchmark.cpp +146 -0
  532. package/external/folly/folly/json/test/DynamicConverterTest.cpp +518 -0
  533. package/external/folly/folly/json/test/DynamicOtherTest.cpp +344 -0
  534. package/external/folly/folly/json/test/DynamicParserTest.cpp +443 -0
  535. package/external/folly/folly/json/test/DynamicTest.cpp +1647 -0
  536. package/external/folly/folly/json/test/JSONSchemaTest.cpp +450 -0
  537. package/external/folly/folly/json/test/JsonBenchmark.cpp +264 -0
  538. package/external/folly/folly/json/test/JsonOtherTest.cpp +51 -0
  539. package/external/folly/folly/json/test/JsonTest.cpp +1153 -0
  540. package/external/folly/folly/json/test/JsonTestUtilTest.cpp +97 -0
  541. package/external/folly/folly/json/test/json_patch_test.cpp +361 -0
  542. package/external/folly/folly/json/test/json_pointer_test.cpp +58 -0
  543. package/external/folly/folly/json/tool/BUCK +13 -0
  544. package/external/folly/folly/json/tool/JSONSchemaTester.cpp +58 -0
  545. package/external/folly/folly/json.h +17 -0
  546. package/external/folly/folly/json_patch.h +17 -0
  547. package/external/folly/folly/json_pointer.h +17 -0
  548. package/external/folly/folly/lang/Access.h +29 -0
  549. package/external/folly/folly/lang/Align.h +240 -0
  550. package/external/folly/folly/lang/Aligned.h +92 -0
  551. package/external/folly/folly/lang/Assume.h +82 -0
  552. package/external/folly/folly/lang/BUCK +287 -0
  553. package/external/folly/folly/lang/Badge.h +108 -0
  554. package/external/folly/folly/lang/Bits.h +570 -0
  555. package/external/folly/folly/lang/BitsClass.h +312 -0
  556. package/external/folly/folly/lang/Builtin.h +74 -0
  557. package/external/folly/folly/lang/CArray.h +34 -0
  558. package/external/folly/folly/lang/CString.cpp +86 -0
  559. package/external/folly/folly/lang/CString.h +55 -0
  560. package/external/folly/folly/lang/Cast.h +51 -0
  561. package/external/folly/folly/lang/CheckedMath.h +253 -0
  562. package/external/folly/folly/lang/CustomizationPoint.h +58 -0
  563. package/external/folly/folly/lang/Exception.cpp +822 -0
  564. package/external/folly/folly/lang/Exception.h +716 -0
  565. package/external/folly/folly/lang/Extern.h +55 -0
  566. package/external/folly/folly/lang/Hint-inl.h +144 -0
  567. package/external/folly/folly/lang/Hint.h +238 -0
  568. package/external/folly/folly/lang/Keep.h +98 -0
  569. package/external/folly/folly/lang/New.h +124 -0
  570. package/external/folly/folly/lang/Ordering.h +140 -0
  571. package/external/folly/folly/lang/Pretty.h +159 -0
  572. package/external/folly/folly/lang/PropagateConst.h +413 -0
  573. package/external/folly/folly/lang/RValueReferenceWrapper.h +152 -0
  574. package/external/folly/folly/lang/SafeAssert.cpp +589 -0
  575. package/external/folly/folly/lang/StaticConst.h +33 -0
  576. package/external/folly/folly/lang/Thunk.h +100 -0
  577. package/external/folly/folly/lang/TypeInfo.h +58 -0
  578. package/external/folly/folly/lang/UncaughtExceptions.cpp +17 -0
  579. package/external/folly/folly/lang/UncaughtExceptions.h +19 -0
  580. package/external/folly/folly/lang/test/AlignTest.cpp +87 -0
  581. package/external/folly/folly/lang/test/AlignedTest.cpp +130 -0
  582. package/external/folly/folly/lang/test/BUCK +258 -0
  583. package/external/folly/folly/lang/test/BadgeTest.cpp +89 -0
  584. package/external/folly/folly/lang/test/BitsBenchmark.cpp +164 -0
  585. package/external/folly/folly/lang/test/BitsClassBenchmark.cpp +122 -0
  586. package/external/folly/folly/lang/test/BitsClassTest.cpp +379 -0
  587. package/external/folly/folly/lang/test/BitsTest.cpp +577 -0
  588. package/external/folly/folly/lang/test/CStringTest.cpp +60 -0
  589. package/external/folly/folly/lang/test/CastTest.cpp +47 -0
  590. package/external/folly/folly/lang/test/CheckedMathTest.cpp +394 -0
  591. package/external/folly/folly/lang/test/ExceptionBench.cpp +427 -0
  592. package/external/folly/folly/lang/test/ExceptionTest.cpp +413 -0
  593. package/external/folly/folly/lang/test/ExternTest.cpp +39 -0
  594. package/external/folly/folly/lang/test/HintTest.cpp +100 -0
  595. package/external/folly/folly/lang/test/NewTest.cpp +38 -0
  596. package/external/folly/folly/lang/test/OrderingTest.cpp +105 -0
  597. package/external/folly/folly/lang/test/PrettyTest.cpp +44 -0
  598. package/external/folly/folly/lang/test/PropagateConstTest.cpp +356 -0
  599. package/external/folly/folly/lang/test/RValueReferenceWrapperTest.cpp +85 -0
  600. package/external/folly/folly/lang/test/SafeAssertTest.cpp +75 -0
  601. package/external/folly/folly/lang/test/ThunkTest.cpp +105 -0
  602. package/external/folly/folly/lang/test/ToAsciiBench.cpp +466 -0
  603. package/external/folly/folly/lang/test/ToAsciiTest.cpp +266 -0
  604. package/external/folly/folly/lang/test/TypeInfoTest.cpp +56 -0
  605. package/external/folly/folly/memcpy.S +292 -0
  606. package/external/folly/folly/memcpy_select_aarch64.cpp +145 -0
  607. package/external/folly/folly/memory/Arena-inl.h +83 -0
  608. package/external/folly/folly/memory/Arena.h +325 -0
  609. package/external/folly/folly/memory/BUCK +191 -0
  610. package/external/folly/folly/memory/JemallocHugePageAllocator.cpp +449 -0
  611. package/external/folly/folly/memory/JemallocHugePageAllocator.h +105 -0
  612. package/external/folly/folly/memory/JemallocHugePageAllocatorTest.cpp +341 -0
  613. package/external/folly/folly/memory/JemallocNodumpAllocator.cpp +176 -0
  614. package/external/folly/folly/memory/JemallocNodumpAllocator.h +119 -0
  615. package/external/folly/folly/memory/JemallocNodumpAllocatorTest.cpp +61 -0
  616. package/external/folly/folly/memory/MallctlHelper.cpp +37 -0
  617. package/external/folly/folly/memory/MallctlHelper.h +167 -0
  618. package/external/folly/folly/memory/Malloc.h +551 -0
  619. package/external/folly/folly/memory/MemoryResource.h +57 -0
  620. package/external/folly/folly/memory/ReentrantAllocator.cpp +162 -0
  621. package/external/folly/folly/memory/ReentrantAllocator.h +261 -0
  622. package/external/folly/folly/memory/SanitizeAddress.cpp +75 -0
  623. package/external/folly/folly/memory/SanitizeAddress.h +117 -0
  624. package/external/folly/folly/memory/SanitizeLeak.cpp +119 -0
  625. package/external/folly/folly/memory/SanitizeLeak.h +108 -0
  626. package/external/folly/folly/memory/ThreadCachedArena.cpp +53 -0
  627. package/external/folly/folly/memory/ThreadCachedArena.h +90 -0
  628. package/external/folly/folly/memory/UninitializedMemoryHacks.h +426 -0
  629. package/external/folly/folly/memory/detail/BUCK +10 -0
  630. package/external/folly/folly/memory/detail/MallocImpl.cpp +52 -0
  631. package/external/folly/folly/memory/detail/MallocImpl.h +97 -0
  632. package/external/folly/folly/memory/not_null-inl.h +522 -0
  633. package/external/folly/folly/memory/not_null.h +449 -0
  634. package/external/folly/folly/memory/test/ArenaTest.cpp +354 -0
  635. package/external/folly/folly/memory/test/BUCK +146 -0
  636. package/external/folly/folly/memory/test/MallctlHelperTest.cpp +169 -0
  637. package/external/folly/folly/memory/test/MallocBenchmark.cpp +91 -0
  638. package/external/folly/folly/memory/test/MallocTest.cpp +78 -0
  639. package/external/folly/folly/memory/test/MemoryResourceTest.cpp +31 -0
  640. package/external/folly/folly/memory/test/ReentrantAllocatorTest.cpp +144 -0
  641. package/external/folly/folly/memory/test/SanitizeAddressTest.cpp +67 -0
  642. package/external/folly/folly/memory/test/SanitizeLeakTest.cpp +139 -0
  643. package/external/folly/folly/memory/test/ThreadCachedArenaTest.cpp +276 -0
  644. package/external/folly/folly/memory/test/UninitializedMemoryHacksODR.cpp +21 -0
  645. package/external/folly/folly/memory/test/UninitializedMemoryHacksTest.cpp +327 -0
  646. package/external/folly/folly/memory/test/not_null_test.cpp +608 -0
  647. package/external/folly/folly/memset.S +245 -0
  648. package/external/folly/folly/memset_select_aarch64.cpp +72 -0
  649. package/external/folly/folly/portability/Asm.h +50 -0
  650. package/external/folly/folly/portability/Atomic.h +31 -0
  651. package/external/folly/folly/portability/BUCK +456 -0
  652. package/external/folly/folly/portability/Builtins.cpp +31 -0
  653. package/external/folly/folly/portability/Builtins.h +161 -0
  654. package/external/folly/folly/portability/Config.h +43 -0
  655. package/external/folly/folly/portability/Constexpr.h +145 -0
  656. package/external/folly/folly/portability/Dirent.cpp +140 -0
  657. package/external/folly/folly/portability/Dirent.h +41 -0
  658. package/external/folly/folly/portability/Event.h +44 -0
  659. package/external/folly/folly/portability/Fcntl.cpp +120 -0
  660. package/external/folly/folly/portability/Fcntl.h +67 -0
  661. package/external/folly/folly/portability/Filesystem.cpp +67 -0
  662. package/external/folly/folly/portability/Filesystem.h +114 -0
  663. package/external/folly/folly/portability/FmtCompile.h +40 -0
  664. package/external/folly/folly/portability/GFlags.h +139 -0
  665. package/external/folly/folly/portability/GMock.h +35 -0
  666. package/external/folly/folly/portability/GTest.h +35 -0
  667. package/external/folly/folly/portability/IOVec.h +34 -0
  668. package/external/folly/folly/portability/Libgen.cpp +59 -0
  669. package/external/folly/folly/portability/Libgen.h +29 -0
  670. package/external/folly/folly/portability/Libunwind.h +21 -0
  671. package/external/folly/folly/portability/Malloc.cpp +31 -0
  672. package/external/folly/folly/portability/Malloc.h +53 -0
  673. package/external/folly/folly/portability/Math.h +90 -0
  674. package/external/folly/folly/portability/Memory.h +26 -0
  675. package/external/folly/folly/portability/OpenSSL.cpp +17 -0
  676. package/external/folly/folly/portability/OpenSSL.h +102 -0
  677. package/external/folly/folly/portability/PThread.cpp +697 -0
  678. package/external/folly/folly/portability/PThread.h +148 -0
  679. package/external/folly/folly/portability/README.md +21 -0
  680. package/external/folly/folly/portability/Sched.cpp +41 -0
  681. package/external/folly/folly/portability/Sched.h +45 -0
  682. package/external/folly/folly/portability/Sockets.cpp +245 -0
  683. package/external/folly/folly/portability/Sockets.h +155 -0
  684. package/external/folly/folly/portability/SourceLocation.h +49 -0
  685. package/external/folly/folly/portability/Stdio.cpp +77 -0
  686. package/external/folly/folly/portability/Stdio.h +32 -0
  687. package/external/folly/folly/portability/Stdlib.cpp +172 -0
  688. package/external/folly/folly/portability/Stdlib.h +64 -0
  689. package/external/folly/folly/portability/String.cpp +53 -0
  690. package/external/folly/folly/portability/String.h +39 -0
  691. package/external/folly/folly/portability/SysFile.cpp +46 -0
  692. package/external/folly/folly/portability/SysFile.h +27 -0
  693. package/external/folly/folly/portability/SysMembarrier.cpp +104 -0
  694. package/external/folly/folly/portability/SysMembarrier.h +26 -0
  695. package/external/folly/folly/portability/SysMman.cpp +242 -0
  696. package/external/folly/folly/portability/SysMman.h +68 -0
  697. package/external/folly/folly/portability/SysResource.cpp +108 -0
  698. package/external/folly/folly/portability/SysResource.h +71 -0
  699. package/external/folly/folly/portability/SysStat.cpp +66 -0
  700. package/external/folly/folly/portability/SysStat.h +52 -0
  701. package/external/folly/folly/portability/SysSyscall.h +73 -0
  702. package/external/folly/folly/portability/SysTime.cpp +62 -0
  703. package/external/folly/folly/portability/SysTime.h +50 -0
  704. package/external/folly/folly/portability/SysTypes.h +44 -0
  705. package/external/folly/folly/portability/SysUio.cpp +179 -0
  706. package/external/folly/folly/portability/SysUio.h +51 -0
  707. package/external/folly/folly/portability/Syslog.h +39 -0
  708. package/external/folly/folly/portability/Time.cpp +357 -0
  709. package/external/folly/folly/portability/Time.h +74 -0
  710. package/external/folly/folly/portability/Unistd.h +111 -0
  711. package/external/folly/folly/portability/Windows.h +108 -0
  712. package/external/folly/folly/portability/openat2.c +30 -0
  713. package/external/folly/folly/portability/openat2.h +39 -0
  714. package/external/folly/folly/portability/test/BUCK +59 -0
  715. package/external/folly/folly/portability/test/ConstexprTest.cpp +102 -0
  716. package/external/folly/folly/portability/test/FilesystemTest.cpp +35 -0
  717. package/external/folly/folly/portability/test/LibgenTest.cpp +35 -0
  718. package/external/folly/folly/portability/test/OpenSSLPortabilityTest.cpp +108 -0
  719. package/external/folly/folly/portability/test/PThreadTest.cpp +80 -0
  720. package/external/folly/folly/portability/test/TimeTest.cpp +90 -0
  721. package/external/folly/folly/small_vector.h +17 -0
  722. package/external/folly/folly/somerge_defs.bzl +399 -0
  723. package/external/folly/folly/sorted_vector_types.h +17 -0
  724. package/external/folly/folly/stop_watch.h +317 -0
  725. package/external/folly/folly/synchronization/AsymmetricThreadFence.cpp +91 -0
  726. package/external/folly/folly/synchronization/AsymmetricThreadFence.h +60 -0
  727. package/external/folly/folly/synchronization/AtomicNotification-inl.h +146 -0
  728. package/external/folly/folly/synchronization/AtomicNotification.cpp +34 -0
  729. package/external/folly/folly/synchronization/AtomicNotification.h +117 -0
  730. package/external/folly/folly/synchronization/AtomicRef.h +181 -0
  731. package/external/folly/folly/synchronization/AtomicStruct.h +150 -0
  732. package/external/folly/folly/synchronization/AtomicUtil-inl.h +482 -0
  733. package/external/folly/folly/synchronization/AtomicUtil.h +179 -0
  734. package/external/folly/folly/synchronization/BUCK +418 -0
  735. package/external/folly/folly/synchronization/Baton.h +419 -0
  736. package/external/folly/folly/synchronization/CallOnce.h +263 -0
  737. package/external/folly/folly/synchronization/DelayedInit.h +179 -0
  738. package/external/folly/folly/synchronization/DistributedMutex-inl.h +1744 -0
  739. package/external/folly/folly/synchronization/DistributedMutex.cpp +27 -0
  740. package/external/folly/folly/synchronization/DistributedMutex.h +342 -0
  741. package/external/folly/folly/synchronization/EventCount.h +200 -0
  742. package/external/folly/folly/synchronization/FlatCombining.h +629 -0
  743. package/external/folly/folly/synchronization/Hazptr-fwd.h +217 -0
  744. package/external/folly/folly/synchronization/Hazptr.cpp +36 -0
  745. package/external/folly/folly/synchronization/Hazptr.h +209 -0
  746. package/external/folly/folly/synchronization/HazptrDomain.cpp +68 -0
  747. package/external/folly/folly/synchronization/HazptrDomain.h +832 -0
  748. package/external/folly/folly/synchronization/HazptrHolder.h +431 -0
  749. package/external/folly/folly/synchronization/HazptrObj.h +533 -0
  750. package/external/folly/folly/synchronization/HazptrObjLinked.h +315 -0
  751. package/external/folly/folly/synchronization/HazptrRec.h +68 -0
  752. package/external/folly/folly/synchronization/HazptrThrLocal.h +180 -0
  753. package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.cpp +46 -0
  754. package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.h +25 -0
  755. package/external/folly/folly/synchronization/Latch.h +160 -0
  756. package/external/folly/folly/synchronization/LifoSem.h +767 -0
  757. package/external/folly/folly/synchronization/Lock.h +887 -0
  758. package/external/folly/folly/synchronization/MicroSpinLock.h +154 -0
  759. package/external/folly/folly/synchronization/NativeSemaphore.h +187 -0
  760. package/external/folly/folly/synchronization/ParkingLot.cpp +37 -0
  761. package/external/folly/folly/synchronization/ParkingLot.h +330 -0
  762. package/external/folly/folly/synchronization/PicoSpinLock.h +167 -0
  763. package/external/folly/folly/synchronization/RWSpinLock.h +549 -0
  764. package/external/folly/folly/synchronization/Rcu.cpp +26 -0
  765. package/external/folly/folly/synchronization/Rcu.h +553 -0
  766. package/external/folly/folly/synchronization/RelaxedAtomic.h +336 -0
  767. package/external/folly/folly/synchronization/SanitizeThread.cpp +141 -0
  768. package/external/folly/folly/synchronization/SanitizeThread.h +166 -0
  769. package/external/folly/folly/synchronization/SaturatingSemaphore.h +324 -0
  770. package/external/folly/folly/synchronization/SmallLocks.h +36 -0
  771. package/external/folly/folly/synchronization/ThrottledLifoSem.h +362 -0
  772. package/external/folly/folly/synchronization/WaitOptions.cpp +25 -0
  773. package/external/folly/folly/synchronization/WaitOptions.h +75 -0
  774. package/external/folly/folly/synchronization/detail/AtomicUtils.h +59 -0
  775. package/external/folly/folly/synchronization/detail/BUCK +104 -0
  776. package/external/folly/folly/synchronization/detail/Hardware.cpp +192 -0
  777. package/external/folly/folly/synchronization/detail/Hardware.h +75 -0
  778. package/external/folly/folly/synchronization/detail/HazptrUtils.h +339 -0
  779. package/external/folly/folly/synchronization/detail/InlineFunctionRef.h +229 -0
  780. package/external/folly/folly/synchronization/detail/Sleeper.cpp +27 -0
  781. package/external/folly/folly/synchronization/detail/Sleeper.h +62 -0
  782. package/external/folly/folly/synchronization/detail/Spin.h +96 -0
  783. package/external/folly/folly/synchronization/detail/ThreadCachedLists.h +174 -0
  784. package/external/folly/folly/synchronization/detail/ThreadCachedReaders.h +189 -0
  785. package/external/folly/folly/synchronization/detail/ThreadCachedTag.h +26 -0
  786. package/external/folly/folly/synchronization/detail/test/BUCK +28 -0
  787. package/external/folly/folly/synchronization/detail/test/HardwareTest.cpp +74 -0
  788. package/external/folly/folly/synchronization/detail/test/InlineFunctionRefTest.cpp +286 -0
  789. package/external/folly/folly/synchronization/example/BUCK +27 -0
  790. package/external/folly/folly/synchronization/example/HazptrLockFreeLIFO.h +88 -0
  791. package/external/folly/folly/synchronization/example/HazptrSWMRSet.h +133 -0
  792. package/external/folly/folly/synchronization/example/HazptrWideCAS.h +62 -0
  793. package/external/folly/folly/synchronization/test/AtomicNotificationTest.cpp +236 -0
  794. package/external/folly/folly/synchronization/test/AtomicRefTest.cpp +170 -0
  795. package/external/folly/folly/synchronization/test/AtomicStructTest.cpp +65 -0
  796. package/external/folly/folly/synchronization/test/AtomicUtilBench.cpp +457 -0
  797. package/external/folly/folly/synchronization/test/AtomicUtilTest.cpp +650 -0
  798. package/external/folly/folly/synchronization/test/BUCK +495 -0
  799. package/external/folly/folly/synchronization/test/Barrier.h +52 -0
  800. package/external/folly/folly/synchronization/test/BarrierTest.cpp +56 -0
  801. package/external/folly/folly/synchronization/test/BatonBenchmark.cpp +77 -0
  802. package/external/folly/folly/synchronization/test/BatonTest.cpp +164 -0
  803. package/external/folly/folly/synchronization/test/BatonTestHelpers.h +118 -0
  804. package/external/folly/folly/synchronization/test/CallOnceBenchmark.cpp +72 -0
  805. package/external/folly/folly/synchronization/test/CallOnceTest.cpp +153 -0
  806. package/external/folly/folly/synchronization/test/DelayedInitTest.cpp +281 -0
  807. package/external/folly/folly/synchronization/test/DistributedMutexTest.cpp +2074 -0
  808. package/external/folly/folly/synchronization/test/EventCountTest.cpp +124 -0
  809. package/external/folly/folly/synchronization/test/FlatCombiningBenchmark.cpp +1789 -0
  810. package/external/folly/folly/synchronization/test/FlatCombiningExamples.h +222 -0
  811. package/external/folly/folly/synchronization/test/FlatCombiningTest.cpp +121 -0
  812. package/external/folly/folly/synchronization/test/FlatCombiningTestHelpers.h +227 -0
  813. package/external/folly/folly/synchronization/test/HazptrTest.cpp +1689 -0
  814. package/external/folly/folly/synchronization/test/LatchTest.cpp +224 -0
  815. package/external/folly/folly/synchronization/test/LifoSemBench.cpp +185 -0
  816. package/external/folly/folly/synchronization/test/LifoSemTests.cpp +353 -0
  817. package/external/folly/folly/synchronization/test/LockTest.cpp +1239 -0
  818. package/external/folly/folly/synchronization/test/NativeSemaphoreTest.cpp +37 -0
  819. package/external/folly/folly/synchronization/test/ParkingLotBenchmark.cpp +239 -0
  820. package/external/folly/folly/synchronization/test/ParkingLotTest.cpp +170 -0
  821. package/external/folly/folly/synchronization/test/RWSpinLockTest.cpp +235 -0
  822. package/external/folly/folly/synchronization/test/RcuBench.cpp +66 -0
  823. package/external/folly/folly/synchronization/test/RcuTest.cpp +330 -0
  824. package/external/folly/folly/synchronization/test/RelaxedAtomicTest.cpp +389 -0
  825. package/external/folly/folly/synchronization/test/SaturatingSemaphoreTest.cpp +166 -0
  826. package/external/folly/folly/synchronization/test/Semaphore.h +242 -0
  827. package/external/folly/folly/synchronization/test/SemaphoreTest.cpp +271 -0
  828. package/external/folly/folly/synchronization/test/SmallLocksBenchmark.cpp +1296 -0
  829. package/external/folly/folly/synchronization/test/SmallLocksTest.cpp +510 -0
  830. package/external/folly/folly/synchronization/test/ThreadCachedEpochBench.h +67 -0
  831. package/external/folly/folly/synchronization/test/ThreadCachedReadersBench.cpp +42 -0
  832. package/external/folly/folly/synchronization/test/ThreadCachedReadersTest.cpp +52 -0
  833. package/external/folly/folly/synchronization/test/ThrottledLifoSemTest.cpp +243 -0
  834. package/external/folly/folly/system/AtFork.cpp +205 -0
  835. package/external/folly/folly/system/AtFork.h +116 -0
  836. package/external/folly/folly/system/AuxVector.h +198 -0
  837. package/external/folly/folly/system/BUCK +144 -0
  838. package/external/folly/folly/system/EnvUtil.cpp +93 -0
  839. package/external/folly/folly/system/EnvUtil.h +113 -0
  840. package/external/folly/folly/system/HardwareConcurrency.cpp +39 -0
  841. package/external/folly/folly/system/HardwareConcurrency.h +23 -0
  842. package/external/folly/folly/system/MemoryMapping.cpp +477 -0
  843. package/external/folly/folly/system/MemoryMapping.h +287 -0
  844. package/external/folly/folly/system/Pid.cpp +87 -0
  845. package/external/folly/folly/system/Pid.h +34 -0
  846. package/external/folly/folly/system/Shell.cpp +33 -0
  847. package/external/folly/folly/system/Shell.h +93 -0
  848. package/external/folly/folly/system/ThreadId.cpp +89 -0
  849. package/external/folly/folly/system/ThreadId.h +62 -0
  850. package/external/folly/folly/system/ThreadName.cpp +330 -0
  851. package/external/folly/folly/system/ThreadName.h +72 -0
  852. package/external/folly/folly/system/test/AtForkTest.cpp +309 -0
  853. package/external/folly/folly/system/test/AuxVectorTest.cpp +55 -0
  854. package/external/folly/folly/system/test/BUCK +120 -0
  855. package/external/folly/folly/system/test/EnvUtilSubprocess.cpp +26 -0
  856. package/external/folly/folly/system/test/EnvUtilTest.cpp +197 -0
  857. package/external/folly/folly/system/test/MemoryMappingTest.cpp +179 -0
  858. package/external/folly/folly/system/test/PidTest.cpp +46 -0
  859. package/external/folly/folly/system/test/ShellTest.cpp +66 -0
  860. package/external/folly/folly/system/test/ThreadIdTest.cpp +114 -0
  861. package/external/folly/folly/system/test/ThreadNameTest.cpp +85 -0
  862. package/external/folly/folly.vcxitems +164 -0
  863. package/external/folly/sync-config.json +8 -0
  864. package/package.json +6 -6
  865. package/template/cpp-app/proj/MyApp.sln +0 -33
  866. package/template/cpp-lib/proj/MyLib.sln +0 -33
  867. package/template/cs-app/proj/MyApp.sln +0 -33
  868. package/template/cs-lib/proj/MyLib.sln +0 -33
  869. package/templates/cpp-app/windows/MyApp.sln +0 -33
  870. package/templates/cpp-lib/windows/MyLib.sln +0 -33
  871. package/Folly/Folly.vcxproj +0 -383
  872. package/Folly/Folly.vcxproj.filters +0 -558
  873. package/Folly/Folly.win32.vcxproj +0 -11
  874. package/Folly/packages.lock.win32.json +0 -20
  875. package/fmt/fmt.vcxproj +0 -163
  876. package/fmt/fmt.vcxproj.filters +0 -59
  877. package/fmt/fmt.win32.vcxproj +0 -10
  878. package/fmt/pch.cpp +0 -4
  879. package/fmt/pch.h +0 -2
  880. /package/{Folly → external/folly}/Folly.natvis +0 -0
  881. /package/{Folly → external/folly}/cgmanifest.json +0 -0
  882. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/ConstexprMath.h +0 -0
  883. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/Conv.cpp +0 -0
  884. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/chrono/Hardware.h +0 -0
  885. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/concurrency/CacheLocality.cpp +0 -0
  886. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/dynamic-inl.h +0 -0
  887. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/json.cpp +0 -0
  888. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/SafeAssert.h +0 -0
  889. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.cpp +0 -0
  890. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.h +0 -0
  891. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/portability/Unistd.cpp +0 -0
@@ -0,0 +1,832 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ #pragma once
18
+
19
+ #include <atomic>
20
+
21
+ #include <folly/Executor.h>
22
+ #include <folly/Memory.h>
23
+ #include <folly/Portability.h>
24
+ #include <folly/container/F14Set.h>
25
+ #include <folly/synchronization/AsymmetricThreadFence.h>
26
+ #include <folly/synchronization/Hazptr-fwd.h>
27
+ #include <folly/synchronization/HazptrObj.h>
28
+ #include <folly/synchronization/HazptrRec.h>
29
+ #include <folly/synchronization/HazptrThrLocal.h>
30
+
31
+ ///
32
+ /// Classes related to hazard pointer domains.
33
+ ///
34
+
35
+ namespace folly {
36
+
37
+ class Executor;
38
+
39
+ namespace detail {
40
+
41
+ /** Threshold for the number of retired objects to trigger
42
+ asynchronous reclamation. */
43
+ constexpr int hazptr_domain_rcount_threshold() {
44
+ return 1000;
45
+ }
46
+
47
+ folly::Executor::KeepAlive<> hazptr_get_default_executor();
48
+
49
+ } // namespace detail
50
+
51
+ /**
52
+ * hazptr_domain
53
+ *
54
+ * A domain manages a set of hazard pointers and a set of retired objects.
55
+ *
56
+ * Most user code need not specify any domains.
57
+ *
58
+ * Notes on destruction order and tagged objects:
59
+ * - Tagged objects support reclamation order guarantees (i.e.,
60
+ * synchronous reclamation). A call to cleanup_cohort_tag(tag)
61
+ * guarantees that all objects with the specified tag are reclaimed
62
+ * before the function returns.
63
+ * - There are two types of reclamation operations to consider:
64
+ * - Asynchronous reclamation: It is triggered by meeting some
65
+ * threshold for the number of retired objects or the time since
66
+ * the last asynchronous reclamation. Reclaimed objects may have
67
+ * different tags or no tags. Hazard pointers are checked and only
68
+ * unprotected objects are reclaimed. This type is expected to be
69
+ * expensive but infrequent and the cost is amortized over a large
70
+ * number of reclaimed objects. This type is needed to guarantee
71
+ * an upper bound on unreclaimed reclaimable objects.
72
+ * - Synchronous reclamation: It is invoked by calling
73
+ * cleanup_cohort_tag for a specific tag. All objects with the
74
+ * specified tag must be reclaimed unconditionally before
75
+ * returning from such a function call. Hazard pointers are not
76
+ * checked. This type of reclamation operation is expected to be
77
+ * inexpensive and may be invoked more frequently than
78
+ * asynchronous reclamation.
79
+ * - Tagged retired objects are kept in a sharded list in the domain
80
+ * structure.
81
+ * - Both asynchronous and synchronous reclamation pop all the
82
+ * objects in the tagged list(s) and sort them into two sets of
83
+ * reclaimable and unreclaimable objects. The objects in the
84
+ * reclaimable set are reclaimed and the objects in the
85
+ * unreclaimable set are pushed back in the tagged list(s).
86
+ * - The tagged list(s) are locked between popping all objects and
87
+ * pushing back unreclaimable objects, in order to guarantee that
88
+ * synchronous reclamation operations do not miss any objects.
89
+ * - Asynchronous reclamation can release the lock(s) on the tagged
90
+ * list(s) before reclaiming reclaimable objects, because it pushes
91
+ * reclaimable tagged objects in their respective cohorts, which
92
+ * would handle concurrent synchronous reclamation of such objects
93
+ * properly.
94
+ * - Synchronous reclamation operations can release the lock on the
95
+ * tagged list shard before reclaiming objects because the sets of
96
+ * reclaimable objects by different synchronous reclamation
97
+ * operations are disjoint.
98
+ */
99
+ template <template <typename> class Atom>
100
+ class hazptr_domain {
101
+ using Obj = hazptr_obj<Atom>;
102
+ using Rec = hazptr_rec<Atom>;
103
+ using List = hazptr_detail::linked_list<Obj>;
104
+ using ObjList = hazptr_obj_list<Atom>;
105
+ using RetiredList = hazptr_detail::shared_head_only_list<Obj, Atom>;
106
+ using Set = folly::F14FastSet<const void*>;
107
+ using ExecFn = folly::Executor::KeepAlive<> (*)();
108
+
109
+ static constexpr int kThreshold = detail::hazptr_domain_rcount_threshold();
110
+ static constexpr int kMultiplier = 2;
111
+ static constexpr int kListTooLarge = 100000;
112
+ static constexpr uint64_t kSyncTimePeriod{2000000000}; // nanoseconds
113
+ static constexpr uintptr_t kTagBit = hazptr_obj<Atom>::kTagBit;
114
+ static constexpr uintptr_t kLockBit = 1;
115
+ static constexpr int kIgnoredLowBits = 8;
116
+
117
+ static constexpr int kNumShards = 8;
118
+ static constexpr int kShardMask = kNumShards - 1;
119
+ static_assert(
120
+ (kNumShards & kShardMask) == 0, "kNumShards must be a power of 2");
121
+
122
+ Atom<Rec*> hazptrs_{nullptr};
123
+ Atom<uintptr_t> avail_{reinterpret_cast<uintptr_t>(nullptr)};
124
+ Atom<uint64_t> sync_time_{0};
125
+ /* Using signed int for rcount_ because it may transiently be negative.
126
+ Using signed int for all integer variables that may be involved in
127
+ calculations related to the value of rcount_. */
128
+ Atom<int> hcount_{0};
129
+ Atom<uint16_t> num_bulk_reclaims_{0};
130
+ bool shutdown_{false};
131
+ RetiredList untagged_[kNumShards];
132
+ RetiredList tagged_[kNumShards];
133
+ Atom<int> count_{0};
134
+ Atom<uint64_t> due_time_{0};
135
+ Atom<ExecFn> exec_fn_{nullptr};
136
+ Atom<int> exec_backlog_{0};
137
+
138
+ public:
139
+ /** Constructor */
140
+ hazptr_domain() = default;
141
+
142
+ /** Destructor */
143
+ ~hazptr_domain() {
144
+ shutdown_ = true;
145
+ reclaim_all_objects();
146
+ free_hazptr_recs();
147
+ if (kIsDebug && !tagged_empty()) {
148
+ LOG(WARNING)
149
+ << "Tagged objects remain. This may indicate a higher-level leak "
150
+ << "of object(s) that use hazptr_obj_cohort.";
151
+ }
152
+ }
153
+
154
+ hazptr_domain(const hazptr_domain&) = delete;
155
+ hazptr_domain(hazptr_domain&&) = delete;
156
+ hazptr_domain& operator=(const hazptr_domain&) = delete;
157
+ hazptr_domain& operator=(hazptr_domain&&) = delete;
158
+
159
+ void set_executor(ExecFn exfn) {
160
+ exec_fn_.store(exfn, std::memory_order_release);
161
+ }
162
+
163
+ void clear_executor() { exec_fn_.store(nullptr, std::memory_order_release); }
164
+
165
+ /** retire - nonintrusive - allocates memory */
166
+ template <typename T, typename D = std::default_delete<T>>
167
+ void retire(T* obj, D reclaim = {}) {
168
+ struct hazptr_retire_node : hazptr_obj<Atom> {
169
+ std::unique_ptr<T, D> obj_;
170
+ hazptr_retire_node(T* retireObj, D toReclaim)
171
+ : obj_{retireObj, std::move(toReclaim)} {}
172
+ };
173
+
174
+ auto node = new hazptr_retire_node(obj, std::move(reclaim));
175
+ node->reclaim_ = [](hazptr_obj<Atom>* p, hazptr_obj_list<Atom>&) {
176
+ delete static_cast<hazptr_retire_node*>(p);
177
+ };
178
+ hazptr_obj_list<Atom> l(node);
179
+ push_list(l);
180
+ }
181
+
182
+ /** cleanup */
183
+ void cleanup() noexcept {
184
+ inc_num_bulk_reclaims();
185
+ do_reclamation(0);
186
+ wait_for_zero_bulk_reclaims(); // wait for concurrent bulk_reclaim-s
187
+ }
188
+
189
+ /** delete_hazard_pointers -- Used only for benchmarking */
190
+ void delete_hazard_pointers() {
191
+ // Call cleanup() to ensure that there is no lagging concurrent
192
+ // asynchronous reclamation in progress.
193
+ cleanup();
194
+ Rec* rec = head();
195
+ while (rec) {
196
+ auto next = rec->next();
197
+ rec->~Rec();
198
+ hazptr_rec_alloc{}.deallocate(rec, 1);
199
+ rec = next;
200
+ }
201
+ hazptrs_.store(nullptr);
202
+ hcount_.store(0);
203
+ avail_.store(reinterpret_cast<uintptr_t>(nullptr));
204
+ }
205
+
206
+ /** cleanup_cohort_tag */
207
+ void cleanup_cohort_tag(const hazptr_obj_cohort<Atom>* cohort) noexcept {
208
+ auto ftag = reinterpret_cast<uintptr_t>(cohort) + kTagBit;
209
+ auto shard = calc_shard(ftag);
210
+ auto obj = tagged_[shard].pop_all(RetiredList::kAlsoLock);
211
+ ObjList match, nomatch;
212
+ list_match_tag(ftag, obj, match, nomatch);
213
+ List l(nomatch.head(), nomatch.tail());
214
+ tagged_[shard].push_unlock(l);
215
+ add_count(-match.count());
216
+ obj = match.head();
217
+ reclaim_list_transitive(obj);
218
+ int count = match.count() + nomatch.count();
219
+ if (count > kListTooLarge) {
220
+ hazptr_warning_list_too_large(ftag, shard, count);
221
+ }
222
+ }
223
+
224
+ void list_match_tag(
225
+ uintptr_t ftag, Obj* obj, ObjList& match, ObjList& nomatch) {
226
+ list_match_condition(obj, match, nomatch, [ftag](Obj* o) {
227
+ return o->cohort_tag() == ftag;
228
+ });
229
+ }
230
+
231
+ private:
232
+ using hazptr_rec_alloc = AlignedSysAllocator<Rec, FixedAlign<alignof(Rec)>>;
233
+
234
+ friend void hazptr_domain_push_retired<Atom>(
235
+ hazptr_obj_list<Atom>&, hazptr_domain<Atom>&) noexcept;
236
+ friend hazptr_holder<Atom> make_hazard_pointer<Atom>(hazptr_domain<Atom>&);
237
+ template <uint8_t M, template <typename> class A>
238
+ friend hazptr_array<M, A> make_hazard_pointer_array();
239
+ friend class hazptr_holder<Atom>;
240
+ friend class hazptr_obj<Atom>;
241
+ friend class hazptr_obj_cohort<Atom>;
242
+ #if FOLLY_HAZPTR_THR_LOCAL
243
+ friend class hazptr_tc<Atom>;
244
+ #endif
245
+
246
+ int load_count() { return count_.load(std::memory_order_acquire); }
247
+
248
+ void add_count(int val) { count_.fetch_add(val, std::memory_order_release); }
249
+
250
+ int exchange_count(int val) {
251
+ return count_.exchange(val, std::memory_order_acq_rel);
252
+ }
253
+
254
+ bool cas_count(int& expected, int newval) {
255
+ return count_.compare_exchange_weak(
256
+ expected, newval, std::memory_order_acq_rel, std::memory_order_relaxed);
257
+ }
258
+
259
+ uint64_t load_due_time() { return due_time_.load(std::memory_order_acquire); }
260
+
261
+ void set_due_time() {
262
+ uint64_t time = std::chrono::duration_cast<std::chrono::nanoseconds>(
263
+ std::chrono::steady_clock::now().time_since_epoch())
264
+ .count();
265
+ due_time_.store(time + kSyncTimePeriod, std::memory_order_release);
266
+ }
267
+
268
+ bool cas_due_time(uint64_t& expected, uint64_t newval) {
269
+ return due_time_.compare_exchange_strong(
270
+ expected, newval, std::memory_order_acq_rel, std::memory_order_relaxed);
271
+ }
272
+
273
+ uint16_t load_num_bulk_reclaims() {
274
+ return num_bulk_reclaims_.load(std::memory_order_acquire);
275
+ }
276
+
277
+ void inc_num_bulk_reclaims() {
278
+ num_bulk_reclaims_.fetch_add(1, std::memory_order_release);
279
+ }
280
+
281
+ void dec_num_bulk_reclaims() {
282
+ DCHECK_GT(load_num_bulk_reclaims(), 0);
283
+ num_bulk_reclaims_.fetch_sub(1, std::memory_order_release);
284
+ }
285
+
286
+ uintptr_t load_avail() { return avail_.load(std::memory_order_acquire); }
287
+
288
+ void store_avail(uintptr_t val) {
289
+ avail_.store(val, std::memory_order_release);
290
+ }
291
+
292
+ bool cas_avail(uintptr_t& expval, uintptr_t newval) {
293
+ return avail_.compare_exchange_weak(
294
+ expval, newval, std::memory_order_acq_rel, std::memory_order_acquire);
295
+ }
296
+
297
+ /** acquire_hprecs */
298
+ Rec* acquire_hprecs(uint8_t num) {
299
+ DCHECK_GE(num, 1);
300
+ // C++17: auto [n, head] = try_pop_available_hprecs(num);
301
+ uint8_t n;
302
+ Rec* head;
303
+ std::tie(n, head) = try_pop_available_hprecs(num);
304
+ for (; n < num; ++n) {
305
+ Rec* rec = create_new_hprec();
306
+ DCHECK(rec->next_avail() == nullptr);
307
+ rec->set_next_avail(head);
308
+ head = rec;
309
+ }
310
+ DCHECK(head);
311
+ return head;
312
+ }
313
+
314
+ /** release_hprec */
315
+ void release_hprec(Rec* hprec) noexcept {
316
+ DCHECK(hprec);
317
+ DCHECK(hprec->next_avail() == nullptr);
318
+ push_available_hprecs(hprec, hprec);
319
+ }
320
+
321
+ /** release_hprecs */
322
+ void release_hprecs(Rec* head, Rec* tail) noexcept {
323
+ DCHECK(head);
324
+ DCHECK(tail);
325
+ DCHECK(tail->next_avail() == nullptr);
326
+ push_available_hprecs(head, tail);
327
+ }
328
+
329
+ /** push_list */
330
+ void push_list(ObjList& l) {
331
+ if (l.empty()) {
332
+ return;
333
+ }
334
+ uintptr_t btag = l.head()->cohort_tag();
335
+ bool tagged = ((btag & kTagBit) == kTagBit);
336
+ /*** Full fence ***/ asymmetric_thread_fence_light(
337
+ std::memory_order_seq_cst);
338
+ List ll(l.head(), l.tail());
339
+ if (!tagged) {
340
+ untagged_[calc_shard(l.head())].push(ll, RetiredList::kMayNotBeLocked);
341
+ } else {
342
+ tagged_[calc_shard(btag)].push(ll, RetiredList::kMayBeLocked);
343
+ }
344
+ add_count(l.count());
345
+ check_threshold_and_reclaim();
346
+ }
347
+
348
+ /** threshold */
349
+ int threshold() {
350
+ auto thresh = kThreshold;
351
+ return std::max(thresh, kMultiplier * hcount());
352
+ }
353
+
354
+ /** check_threshold_and_reclaim */
355
+ void check_threshold_and_reclaim() {
356
+ int rcount = check_count_threshold();
357
+ if (rcount == 0) {
358
+ rcount = check_due_time();
359
+ if (rcount == 0)
360
+ return;
361
+ }
362
+ inc_num_bulk_reclaims();
363
+ if (!invoke_reclamation_in_executor(rcount)) {
364
+ do_reclamation(rcount);
365
+ }
366
+ }
367
+
368
+ /** calc_shard */
369
+ size_t calc_shard(uintptr_t ftag) {
370
+ size_t shard =
371
+ (std::hash<uintptr_t>{}(ftag) >> kIgnoredLowBits) & kShardMask;
372
+ DCHECK(shard < kNumShards);
373
+ return shard;
374
+ }
375
+
376
+ size_t calc_shard(Obj* obj) {
377
+ return calc_shard(reinterpret_cast<uintptr_t>(obj));
378
+ }
379
+
380
+ /** check_due_time */
381
+ int check_due_time() {
382
+ uint64_t time = std::chrono::duration_cast<std::chrono::nanoseconds>(
383
+ std::chrono::steady_clock::now().time_since_epoch())
384
+ .count();
385
+ auto due = load_due_time();
386
+ if (time < due || !cas_due_time(due, time + kSyncTimePeriod))
387
+ return 0;
388
+ int rcount = exchange_count(0);
389
+ if (rcount < 0) {
390
+ add_count(rcount);
391
+ return 0;
392
+ }
393
+ return rcount;
394
+ }
395
+
396
+ /** check_count_threshold */
397
+ int check_count_threshold() {
398
+ int rcount = load_count();
399
+ while (rcount >= threshold()) {
400
+ if (cas_count(rcount, 0)) {
401
+ set_due_time();
402
+ return rcount;
403
+ }
404
+ }
405
+ return 0;
406
+ }
407
+
408
+ /** tagged_empty */
409
+ bool tagged_empty() {
410
+ for (int s = 0; s < kNumShards; ++s) {
411
+ if (!tagged_[s].empty())
412
+ return false;
413
+ }
414
+ return true;
415
+ }
416
+
417
+ /** untagged_empty */
418
+ bool untagged_empty() {
419
+ for (int s = 0; s < kNumShards; ++s) {
420
+ if (!untagged_[s].empty())
421
+ return false;
422
+ }
423
+ return true;
424
+ }
425
+
426
+ /** extract_retired_objects */
427
+ bool extract_retired_objects(Obj* untagged[], Obj* tagged[]) {
428
+ bool empty = true;
429
+ for (int s = 0; s < kNumShards; ++s) {
430
+ untagged[s] = untagged_[s].pop_all(RetiredList::kDontLock);
431
+ if (untagged[s]) {
432
+ empty = false;
433
+ }
434
+ }
435
+ for (int s = 0; s < kNumShards; ++s) {
436
+ /* Tagged lists need to be locked because tagging is used to
437
+ * guarantee the identification of all objects with a specific
438
+ * tag. Locking protects against concurrent hazptr_cleanup_tag()
439
+ * calls missing tagged objects. */
440
+ if (tagged_[s].check_lock()) {
441
+ tagged[s] = nullptr;
442
+ } else {
443
+ tagged[s] = tagged_[s].pop_all(RetiredList::kAlsoLock);
444
+ if (tagged[s]) {
445
+ empty = false;
446
+ } else {
447
+ List l;
448
+ tagged_[s].push_unlock(l);
449
+ }
450
+ }
451
+ }
452
+ return !empty;
453
+ }
454
+
455
+ /** load_hazptr_vals */
456
+ Set load_hazptr_vals() {
457
+ Set hs;
458
+ auto hprec = hazptrs_.load(std::memory_order_acquire);
459
+ for (; hprec; hprec = hprec->next()) {
460
+ hs.insert(hprec->hazptr());
461
+ }
462
+ return hs;
463
+ }
464
+
465
+ /** match_tagged */
466
+ int match_tagged(Obj* tagged[], Set& hs) {
467
+ int count = 0;
468
+ for (int s = 0; s < kNumShards; ++s) {
469
+ if (tagged[s]) {
470
+ ObjList match, nomatch;
471
+ list_match_condition(tagged[s], match, nomatch, [&](Obj* o) {
472
+ return hs.count(o->raw_ptr()) > 0;
473
+ });
474
+ count += nomatch.count();
475
+ auto obj = nomatch.head();
476
+ while (obj) {
477
+ auto next = obj->next();
478
+ auto cohort = obj->cohort();
479
+ DCHECK(cohort);
480
+ cohort->push_safe_obj(obj);
481
+ obj = next;
482
+ }
483
+ List l(match.head(), match.tail());
484
+ tagged_[s].push_unlock(l);
485
+ }
486
+ }
487
+ return count;
488
+ }
489
+
490
+ /** match_reclaim_untagged */
491
+ int match_reclaim_untagged(Obj* untagged[], Set& hs, bool& done) {
492
+ done = true;
493
+ ObjList not_reclaimed;
494
+ int count = 0;
495
+ for (int s = 0; s < kNumShards; ++s) {
496
+ ObjList match, nomatch;
497
+ list_match_condition(untagged[s], match, nomatch, [&](Obj* o) {
498
+ return hs.count(o->raw_ptr()) > 0;
499
+ });
500
+ ObjList children;
501
+ count += nomatch.count();
502
+ reclaim_unprotected(nomatch.head(), children);
503
+ if (!untagged_empty() || !children.empty()) {
504
+ done = false;
505
+ }
506
+ count -= children.count();
507
+ not_reclaimed.splice(match);
508
+ not_reclaimed.splice(children);
509
+ }
510
+ List l(not_reclaimed.head(), not_reclaimed.tail());
511
+ untagged_[0].push(l, RetiredList::kMayNotBeLocked);
512
+ return count;
513
+ }
514
+
515
+ /** do_reclamation */
516
+ void do_reclamation(int rcount) {
517
+ DCHECK_GE(rcount, 0);
518
+ while (true) {
519
+ Obj* untagged[kNumShards];
520
+ Obj* tagged[kNumShards];
521
+ bool done = true;
522
+ if (extract_retired_objects(untagged, tagged)) {
523
+ /*** Full fence ***/ asymmetric_thread_fence_heavy(
524
+ std::memory_order_seq_cst);
525
+ Set hs = load_hazptr_vals();
526
+ rcount -= match_tagged(tagged, hs);
527
+ rcount -= match_reclaim_untagged(untagged, hs, done);
528
+ }
529
+ if (rcount) {
530
+ add_count(rcount);
531
+ }
532
+ rcount = check_count_threshold();
533
+ if (rcount == 0 && done)
534
+ break;
535
+ }
536
+ dec_num_bulk_reclaims();
537
+ }
538
+
539
+ /** list_match_condition */
540
+ template <typename Cond>
541
+ void list_match_condition(
542
+ Obj* obj, ObjList& match, ObjList& nomatch, const Cond& cond) {
543
+ while (obj) {
544
+ auto next = obj->next();
545
+ DCHECK_NE(obj, next);
546
+ if (cond(obj)) {
547
+ match.push(obj);
548
+ } else {
549
+ nomatch.push(obj);
550
+ }
551
+ obj = next;
552
+ }
553
+ }
554
+
555
+ /** reclaim_unprotected */
556
+ void reclaim_unprotected(Obj* obj, ObjList& children) {
557
+ while (obj) {
558
+ auto next = obj->next();
559
+ (*(obj->reclaim()))(obj, children);
560
+ obj = next;
561
+ }
562
+ }
563
+
564
+ /** reclaim_unconditional */
565
+ void reclaim_unconditional(Obj* head, ObjList& children) {
566
+ while (head) {
567
+ auto next = head->next();
568
+ (*(head->reclaim()))(head, children);
569
+ head = next;
570
+ }
571
+ }
572
+
573
+ Rec* head() const noexcept {
574
+ return hazptrs_.load(std::memory_order_acquire);
575
+ }
576
+
577
+ int hcount() const noexcept {
578
+ return hcount_.load(std::memory_order_acquire);
579
+ }
580
+
581
+ void reclaim_all_objects() {
582
+ for (int s = 0; s < kNumShards; ++s) {
583
+ Obj* head = untagged_[s].pop_all(RetiredList::kDontLock);
584
+ reclaim_list_transitive(head);
585
+ }
586
+ }
587
+
588
+ void reclaim_list_transitive(Obj* head) {
589
+ while (head) {
590
+ ObjList children;
591
+ reclaim_unconditional(head, children);
592
+ head = children.head();
593
+ }
594
+ }
595
+
596
+ void free_hazptr_recs() {
597
+ /* Leak the hazard pointers for the default domain to avoid
598
+ destruction order issues with thread caches. */
599
+ if (this == &default_hazptr_domain<Atom>()) {
600
+ return;
601
+ }
602
+ auto rec = head();
603
+ while (rec) {
604
+ auto next = rec->next();
605
+ rec->~Rec();
606
+ hazptr_rec_alloc{}.deallocate(rec, 1);
607
+ rec = next;
608
+ }
609
+ }
610
+
611
+ void wait_for_zero_bulk_reclaims() {
612
+ while (load_num_bulk_reclaims() > 0) {
613
+ std::this_thread::yield();
614
+ }
615
+ }
616
+
617
+ std::pair<uint8_t, Rec*> try_pop_available_hprecs(uint8_t num) {
618
+ DCHECK_GE(num, 1);
619
+ while (true) {
620
+ uintptr_t avail = load_avail();
621
+ if (avail == reinterpret_cast<uintptr_t>(nullptr)) {
622
+ return {0, nullptr};
623
+ }
624
+ if ((avail & kLockBit) == 0) {
625
+ // Try to lock avail list
626
+ if (cas_avail(avail, avail | kLockBit)) {
627
+ // Lock acquired
628
+ Rec* head = reinterpret_cast<Rec*>(avail);
629
+ uint8_t nn = pop_available_hprecs_release_lock(num, head);
630
+ // Lock released
631
+ DCHECK_GE(nn, 1);
632
+ DCHECK_LE(nn, num);
633
+ return {nn, head};
634
+ }
635
+ } else {
636
+ std::this_thread::yield();
637
+ }
638
+ }
639
+ }
640
+
641
+ uint8_t pop_available_hprecs_release_lock(uint8_t num, Rec* head) {
642
+ // Lock already acquired
643
+ DCHECK_GE(num, 1);
644
+ DCHECK(head);
645
+ Rec* tail = head;
646
+ uint8_t nn = 1;
647
+ Rec* next = tail->next_avail();
648
+ while ((next != nullptr) && (nn < num)) {
649
+ DCHECK_EQ(reinterpret_cast<uintptr_t>(next) & kLockBit, 0);
650
+ tail = next;
651
+ next = tail->next_avail();
652
+ ++nn;
653
+ }
654
+ uintptr_t newval = reinterpret_cast<uintptr_t>(next);
655
+ DCHECK_EQ(newval & kLockBit, 0);
656
+ // Release lock
657
+ store_avail(newval);
658
+ tail->set_next_avail(nullptr);
659
+ return nn;
660
+ }
661
+
662
+ void push_available_hprecs(Rec* head, Rec* tail) {
663
+ DCHECK(head);
664
+ DCHECK(tail);
665
+ DCHECK(tail->next_avail() == nullptr);
666
+ if (kIsDebug) {
667
+ dcheck_connected(head, tail);
668
+ }
669
+ uintptr_t newval = reinterpret_cast<uintptr_t>(head);
670
+ DCHECK_EQ(newval & kLockBit, 0);
671
+ while (true) {
672
+ uintptr_t avail = load_avail();
673
+ if ((avail & kLockBit) == 0) {
674
+ // Try to push if unlocked
675
+ auto next = reinterpret_cast<Rec*>(avail);
676
+ tail->set_next_avail(next);
677
+ if (cas_avail(avail, newval)) {
678
+ break;
679
+ }
680
+ } else {
681
+ std::this_thread::yield();
682
+ }
683
+ }
684
+ }
685
+
686
+ void dcheck_connected(Rec* head, Rec* tail) {
687
+ Rec* rec = head;
688
+ bool connected = false;
689
+ while (rec) {
690
+ Rec* next = rec->next_avail();
691
+ if (rec == tail) {
692
+ connected = true;
693
+ DCHECK(next == nullptr);
694
+ }
695
+ rec = next;
696
+ }
697
+ DCHECK(connected);
698
+ }
699
+
700
+ Rec* create_new_hprec() {
701
+ auto rec = hazptr_rec_alloc{}.allocate(1);
702
+ new (rec) Rec();
703
+ rec->set_domain(this);
704
+ while (true) {
705
+ auto h = head();
706
+ rec->set_next(h);
707
+ if (hazptrs_.compare_exchange_weak(
708
+ h, rec, std::memory_order_release, std::memory_order_acquire)) {
709
+ break;
710
+ }
711
+ }
712
+ hcount_.fetch_add(1);
713
+ return rec;
714
+ }
715
+
716
+ bool invoke_reclamation_in_executor(int rcount) {
717
+ if (!std::is_same<Atom<int>, std::atomic<int>>{} ||
718
+ this != &default_hazptr_domain<Atom>() || !hazptr_use_executor()) {
719
+ return false;
720
+ }
721
+ auto fn = exec_fn_.load(std::memory_order_acquire);
722
+ folly::Executor::KeepAlive<> ex =
723
+ fn ? fn() : detail::hazptr_get_default_executor();
724
+ if (!ex) {
725
+ return false;
726
+ }
727
+ auto backlog = exec_backlog_.fetch_add(1, std::memory_order_relaxed);
728
+ auto recl_fn = [this, rcount, ka = ex] {
729
+ exec_backlog_.store(0, std::memory_order_relaxed);
730
+ do_reclamation(rcount);
731
+ };
732
+ if (ex.get() == detail::hazptr_get_default_executor().get()) {
733
+ invoke_reclamation_may_deadlock(ex, recl_fn);
734
+ } else {
735
+ ex->add(recl_fn);
736
+ }
737
+ if (backlog >= 10) {
738
+ hazptr_warning_executor_backlog(backlog);
739
+ }
740
+ return true;
741
+ }
742
+
743
+ template <typename Func>
744
+ void invoke_reclamation_may_deadlock(
745
+ folly::Executor::KeepAlive<> ex, Func recl_fn) {
746
+ ex->add(recl_fn);
747
+ // This program is using the default executor, which is an
748
+ // inline executor. This is not necessarily a problem. But if this
749
+ // program encounters deadlock, then this may be the cause. Most
750
+ // likely this program did not call
751
+ // folly::enable_hazptr_thread_pool_executor (which is normally
752
+ // called by folly::init). If this is a problem check if your
753
+ // program is missing a call to folly::init or an alternative.
754
+ }
755
+
756
+ FOLLY_EXPORT FOLLY_NOINLINE void hazptr_warning_list_too_large(
757
+ uintptr_t ftag, size_t shard, int count) {
758
+ static std::atomic<uint64_t> warning_count{0};
759
+ if ((warning_count++ % 10000) == 0) {
760
+ LOG(WARNING) << "Hazptr retired list too large:" << " ftag=" << ftag
761
+ << " shard=" << shard << " count=" << count;
762
+ }
763
+ }
764
+
765
+ FOLLY_EXPORT FOLLY_NOINLINE void hazptr_warning_executor_backlog(
766
+ int backlog) {
767
+ static std::atomic<uint64_t> warning_count{0};
768
+ if ((warning_count++ % 10000) == 0) {
769
+ LOG(WARNING) << backlog
770
+ << " request backlog for hazptr asynchronous "
771
+ "reclamation executor";
772
+ }
773
+ }
774
+ }; // hazptr_domain
775
+
776
+ /**
777
+ * Free functions related to hazptr domains
778
+ */
779
+
780
+ /** default_hazptr_domain: Returns reference to the default domain */
781
+
782
+ template <template <typename> class Atom>
783
+ struct hazptr_default_domain_helper {
784
+ static FOLLY_ALWAYS_INLINE hazptr_domain<Atom>& get() {
785
+ static hazptr_domain<Atom> domain;
786
+ return domain;
787
+ }
788
+ };
789
+
790
+ template <>
791
+ struct hazptr_default_domain_helper<std::atomic> {
792
+ static FOLLY_ALWAYS_INLINE hazptr_domain<std::atomic>& get() {
793
+ return default_domain;
794
+ }
795
+ };
796
+
797
+ template <template <typename> class Atom>
798
+ FOLLY_ALWAYS_INLINE hazptr_domain<Atom>& default_hazptr_domain() {
799
+ return hazptr_default_domain_helper<Atom>::get();
800
+ }
801
+
802
+ template <template <typename> class Atom>
803
+ FOLLY_ALWAYS_INLINE hazard_pointer_domain<Atom>&
804
+ hazard_pointer_default_domain() {
805
+ return default_hazptr_domain<Atom>();
806
+ }
807
+
808
+ /** hazptr_domain_push_retired: push a list of retired objects into a domain */
809
+ template <template <typename> class Atom>
810
+ void hazptr_domain_push_retired(
811
+ hazptr_obj_list<Atom>& l, hazptr_domain<Atom>& domain) noexcept {
812
+ domain.push_list(l);
813
+ }
814
+
815
+ /** hazptr_retire */
816
+ template <template <typename> class Atom, typename T, typename D>
817
+ FOLLY_ALWAYS_INLINE void hazptr_retire(T* obj, D reclaim) {
818
+ default_hazptr_domain<Atom>().retire(obj, std::move(reclaim));
819
+ }
820
+
821
+ /** hazptr_cleanup: Reclaims all reclaimable objects retired to the domain */
822
+ template <template <typename> class Atom>
823
+ void hazptr_cleanup(hazptr_domain<Atom>& domain) noexcept {
824
+ domain.cleanup();
825
+ }
826
+
827
+ template <template <typename> class Atom>
828
+ void hazard_pointer_clean_up(hazard_pointer_domain<Atom>& domain) noexcept {
829
+ hazptr_cleanup(domain);
830
+ }
831
+
832
+ } // namespace folly