[Mlir-commits] [mlir] [MLIR] Fix use-after-frees when accessing DistinctAttr storage (PR #148666)
Tobias Gysi
llvmlistbot at llvm.org
Tue Jul 15 08:46:22 PDT 2025
================
@@ -396,27 +394,30 @@ class DistinctAttributeUniquer {
Attribute referencedAttr);
};
-/// An allocator for distinct attribute storage instances. It uses thread local
-/// bump pointer allocators stored in a thread local cache to ensure the storage
-/// is freed after the destruction of the distinct attribute allocator.
-class DistinctAttributeAllocator {
+/// An allocator for distinct attribute storage instances. Uses a synchronized
+/// BumpPtrAllocator to ensure thread-safety. The allocated storage is deleted
+/// when the DistinctAttributeAllocator is destroyed.
+class DistinctAttributeAllocator final {
public:
DistinctAttributeAllocator() = default;
-
DistinctAttributeAllocator(DistinctAttributeAllocator &&) = delete;
DistinctAttributeAllocator(const DistinctAttributeAllocator &) = delete;
DistinctAttributeAllocator &
operator=(const DistinctAttributeAllocator &) = delete;
- /// Allocates a distinct attribute storage using a thread local bump pointer
- /// allocator to enable synchronization free parallel allocations.
DistinctAttrStorage *allocate(Attribute referencedAttr) {
- return new (allocatorCache.get().Allocate<DistinctAttrStorage>())
+ std::scoped_lock<std::mutex> guard(allocatorMutex);
+ return new (allocator.Allocate<DistinctAttrStorage>())
DistinctAttrStorage(referencedAttr);
- }
+ };
private:
- ThreadLocalCache<llvm::BumpPtrAllocator> allocatorCache;
+ /// Used to allocate distict attribute storages. The managed memory is freed
----------------
gysit wrote:
```suggestion
/// Used to allocate distinct attribute storages. The managed memory is freed
```
nit: one last typo
https://github.com/llvm/llvm-project/pull/148666
More information about the Mlir-commits
mailing list