[Mlir-commits] [mlir] [MLIR] Fix use-after-frees when accessing DistinctAttr storage (PR #148666)
Tobias Gysi
llvmlistbot at llvm.org
Tue Jul 15 04:21:07 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 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 storage. When this allocator destroyed
+ /// in till also dealllocate any storage instances
----------------
gysit wrote:
```suggestion
/// Used to allocate distinct attribute storages. The managed memory is freed automatically when the allocator instance is destroyed.
```
nit: some typos plus the second sentence did not parse.
https://github.com/llvm/llvm-project/pull/148666
More information about the Mlir-commits
mailing list