From 6f8bcddf6ad0f0e117278bd77a53211ab2970f38 Mon Sep 17 00:00:00 2001 From: Maksim Manainen Date: Thu, 17 Jul 2025 14:45:52 +0000 Subject: [PATCH 1/2] init --- mlir/lib/Bindings/Python/IRAttributes.cpp | 13 ++++++++++++- mlir/test/python/ir/array_attributes.py | 13 +++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/mlir/lib/Bindings/Python/IRAttributes.cpp b/mlir/lib/Bindings/Python/IRAttributes.cpp index 8f79caf08a6d0..32f32db9256ef 100644 --- a/mlir/lib/Bindings/Python/IRAttributes.cpp +++ b/mlir/lib/Bindings/Python/IRAttributes.cpp @@ -18,6 +18,7 @@ #include "mlir-c/BuiltinTypes.h" #include "mlir/Bindings/Python/NanobindAdaptors.h" #include "mlir/Bindings/Python/Nanobind.h" +#include "pylifecycle.h" #include "llvm/ADT/ScopeExit.h" #include "llvm/Support/raw_ostream.h" @@ -1428,6 +1429,16 @@ class PyDenseIntElementsAttribute } }; +static bool pythonIsFinalizing() { +#if PY_VERSION_HEX >= 0x030d0000 + return Py_IsFinalizing(); +#elif PY_VERSION_HEX >= 0x03070000 + return _Py_IsFinalizing(); +#else + return _Py_Finalizing != nullptr; +#endif +} + class PyDenseResourceElementsAttribute : public PyConcreteAttribute { public: @@ -1474,7 +1485,7 @@ class PyDenseResourceElementsAttribute // The userData is a Py_buffer* that the deleter owns. auto deleter = [](void *userData, const void *data, size_t size, size_t align) { - if (!Py_IsInitialized()) + if (!(Py_IsInitialized() || pythonIsFinalizing())) Py_Initialize(); Py_buffer *ownedView = static_cast(userData); nb::gil_scoped_acquire gil; diff --git a/mlir/test/python/ir/array_attributes.py b/mlir/test/python/ir/array_attributes.py index ef1d835fc6401..48ae2fdaf567f 100644 --- a/mlir/test/python/ir/array_attributes.py +++ b/mlir/test/python/ir/array_attributes.py @@ -617,3 +617,16 @@ def test_attribute(context, mview): # CHECK: BACKING MEMORY DELETED # CHECK: EXIT FUNCTION print("EXIT FUNCTION") + + +print("TEST: danglingResource") +# This error occurs only when there is an alive context with a DenseResourceElementsAttr +# in the end of the program, so we put it here without an encapsulating function. +ctx = Context() + +with ctx, Location.unknown(): + DenseResourceElementsAttr.get_from_buffer( + memoryview(np.array([1,2,3])), + "some_resource", + RankedTensorType.get((3,), IntegerType.get_signed(32)) + ) From e202ab69aea991d4b5a1e893c0b55936d8682a88 Mon Sep 17 00:00:00 2001 From: Maksim Manainen Date: Thu, 17 Jul 2025 14:50:31 +0000 Subject: [PATCH 2/2] remove include --- mlir/lib/Bindings/Python/IRAttributes.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/mlir/lib/Bindings/Python/IRAttributes.cpp b/mlir/lib/Bindings/Python/IRAttributes.cpp index 32f32db9256ef..fad7d2ad25db0 100644 --- a/mlir/lib/Bindings/Python/IRAttributes.cpp +++ b/mlir/lib/Bindings/Python/IRAttributes.cpp @@ -18,7 +18,6 @@ #include "mlir-c/BuiltinTypes.h" #include "mlir/Bindings/Python/NanobindAdaptors.h" #include "mlir/Bindings/Python/Nanobind.h" -#include "pylifecycle.h" #include "llvm/ADT/ScopeExit.h" #include "llvm/Support/raw_ostream.h"