This is an automated email from the ASF dual-hosted git repository.

tqchen pushed a commit to branch refactor-s0
in repository https://gitbox.apache.org/repos/asf/tvm.git

commit 3bb75d4cb19a7bbdb2a6a1714d2c4f9e3ba862c3
Author: tqchen <[email protected]>
AuthorDate: Mon Mar 10 10:06:01 2025 -0400

    Fix deleter to match latest
---
 include/tvm/runtime/memory.h                |  1 +
 include/tvm/runtime/memory/memory_manager.h |  4 ++--
 include/tvm/runtime/ndarray.h               |  2 +-
 include/tvm/runtime/object.h                | 10 ++++++----
 src/runtime/memory/memory_manager.cc        | 12 ++++++------
 src/runtime/ndarray.cc                      | 15 +++++++++------
 src/runtime/rpc/rpc_module.cc               |  4 ++--
 7 files changed, 27 insertions(+), 21 deletions(-)

diff --git a/include/tvm/runtime/memory.h b/include/tvm/runtime/memory.h
index 04b4a1e7d4..2b317d05c5 100644
--- a/include/tvm/runtime/memory.h
+++ b/include/tvm/runtime/memory.h
@@ -30,6 +30,7 @@ namespace runtime {
 
 using tvm::ffi::make_inplace_array_object;
 using tvm::ffi::make_object;
+using tvm::ffi::FObjectDeleter;
 
 }  // namespace runtime
 }  // namespace tvm
diff --git a/include/tvm/runtime/memory/memory_manager.h 
b/include/tvm/runtime/memory/memory_manager.h
index a88d05603f..3def5224ed 100644
--- a/include/tvm/runtime/memory/memory_manager.h
+++ b/include/tvm/runtime/memory/memory_manager.h
@@ -171,10 +171,10 @@ class StorageObj : public Object {
                                      String scope = "global");
 
   /*! \brief The deleter for an NDArray when allocated from underlying 
storage. */
-  static void ScopedDeleter(void* ptr);
+  static void ScopedDeleter(TVMFFIObject* ptr);
 
   /*! \brief The deleter for an NDArray when allocated from underlying 
storage. */
-  static void Deleter(void* ptr);
+  static void Deleter(TVMFFIObject* ptr);
 
   ~StorageObj() {
     if (allocator) {
diff --git a/include/tvm/runtime/ndarray.h b/include/tvm/runtime/ndarray.h
index 4ed86fee82..3bfdc74e7c 100644
--- a/include/tvm/runtime/ndarray.h
+++ b/include/tvm/runtime/ndarray.h
@@ -332,7 +332,7 @@ class NDArray::Container : public Object, public 
NDArray::ContainerBase {
    * \brief Set the deleter field.
    * \param deleter The deleter.
    */
-  void SetDeleter(void (*deleter)(void* self)) { header_.deleter = deleter; }
+  void SetDeleter(ffi::FObjectDeleter deleter) { header_.deleter = deleter; }
 
   // Expose DecRef and IncRef as public function
   // NOTE: they are only for developer purposes only.
diff --git a/include/tvm/runtime/object.h b/include/tvm/runtime/object.h
index 1edfae6abb..76ed5c0096 100644
--- a/include/tvm/runtime/object.h
+++ b/include/tvm/runtime/object.h
@@ -51,9 +51,7 @@ using tvm::ffi::GetRef;
 enum TypeIndex : int32_t {
   // Standard static index assignments,
   // Frontends can take benefit of these constants.
-  kRuntimeString = TVMFFITypeIndex::kTVMFFIStr,
-  kRuntimeMap = TVMFFITypeIndex::kTVMFFIMap,
-  kRuntimeArray = TVMFFITypeIndex::kTVMFFIArray,
+
   /*! \brief runtime::Module. */
   kRuntimeModule = TVMFFITypeIndex::kTVMFFIRuntimeModule,
   /*! \brief runtime::NDArray. */
@@ -68,6 +66,10 @@ enum TypeIndex : int32_t {
   kRuntimeDiscoDRef = kCustomStaticIndex + 2,
   /*! \brief runtime::RPCObjectRef */
   kRuntimeRPCObjectRef = kCustomStaticIndex + 3,
+  // custom builtin
+  kRuntimeString,
+  kRuntimeMap,
+  kRuntimeArray,
   // static assignments that may subject to change.
   kStaticIndexEnd,
 };
@@ -194,7 +196,7 @@ class ObjectRef : public tvm::ffi::ObjectRef {
  */
 #define TVM_DEFINE_OBJECT_REF_METHODS_WITHOUT_DEFAULT_CONSTRUCTOR(TypeName, 
ParentType,        \
                                                                   ObjectName)  
                \
-  explicit TypeName(::tvm::runtime::ObjectPtr<::tvm::runtime::Object> n) : 
ParentType(n) {}    \
+  explicit TypeName(::tvm::ffi::ObjectPtr<::tvm::ffi::Object> n) : 
ParentType(n) {}            \
   TVM_DEFINE_DEFAULT_COPY_MOVE_AND_ASSIGN(TypeName);                           
                \
   const ObjectName* operator->() const { return static_cast<const 
ObjectName*>(data_.get()); } \
   const ObjectName* get() const { return operator->(); }                       
                \
diff --git a/src/runtime/memory/memory_manager.cc 
b/src/runtime/memory/memory_manager.cc
index fb10b7724b..97fcf0534f 100644
--- a/src/runtime/memory/memory_manager.cc
+++ b/src/runtime/memory/memory_manager.cc
@@ -34,8 +34,8 @@ namespace tvm {
 namespace runtime {
 namespace memory {
 
-static void BufferDeleter(void* obj) {
-  auto* ptr = static_cast<NDArray::Container*>(obj);
+static void BufferDeleter(TVMFFIObject* ptr_obj) {
+  auto* ptr = 
ffi::details::ObjectUnsafe::RawObjectPtrFromUnowned<NDArray::Container>(ptr_obj);
   ICHECK(ptr->manager_ctx != nullptr);
   Buffer* buffer = reinterpret_cast<Buffer*>(ptr->manager_ctx);
   MemoryManager::GetAllocator(buffer->device, 
buffer->alloc_type)->Free(*(buffer));
@@ -50,8 +50,8 @@ Storage::Storage(Buffer buffer, Allocator* allocator) {
   data_ = std::move(n);
 }
 
-void StorageObj::Deleter(void* obj) {
-  auto* ptr = static_cast<NDArray::Container*>(obj);
+void StorageObj::Deleter(TVMFFIObject* ptr_obj) {
+  auto* ptr = 
ffi::details::ObjectUnsafe::RawObjectPtrFromUnowned<NDArray::Container>(ptr_obj);
   // When invoking AllocNDArray we don't own the underlying allocation
   // and should not delete the buffer, but instead let it be reclaimed
   // by the storage object's destructor.
@@ -85,8 +85,8 @@ inline size_t GetDataAlignment(const DLTensor& arr) {
   return align;
 }
 
-void StorageObj::ScopedDeleter(void* obj) {
-  auto* ptr = static_cast<NDArray::Container*>(obj);
+void StorageObj::ScopedDeleter(TVMFFIObject* ptr_obj) {
+  auto* ptr = 
ffi::details::ObjectUnsafe::RawObjectPtrFromUnowned<NDArray::Container>(ptr_obj);
   StorageObj* storage = reinterpret_cast<StorageObj*>(ptr->manager_ctx);
 
   // Let the device handle proper cleanup of view
diff --git a/src/runtime/ndarray.cc b/src/runtime/ndarray.cc
index 67b30bb0d1..9ad2b19ef9 100644
--- a/src/runtime/ndarray.cc
+++ b/src/runtime/ndarray.cc
@@ -101,8 +101,9 @@ void ArrayCopyToBytes(const DLTensor* handle, void* data, 
size_t nbytes) {
 
 struct NDArray::Internal {
   // Default deleter for the container
-  static void DefaultDeleter(void* ptr_obj) {
-    auto* ptr = static_cast<NDArray::Container*>(ptr_obj);
+  static void DefaultDeleter(TVMFFIObject* ptr_obj) {
+    auto* ptr =
+      
ffi::details::ObjectUnsafe::RawObjectPtrFromUnowned<NDArray::Container>(ptr_obj);
     if (ptr->manager_ctx != nullptr) {
       ffi::details::ObjectUnsafe::DecRefObjectHandle(
           static_cast<NDArray::Container*>(ptr->manager_ctx));
@@ -117,8 +118,9 @@ struct NDArray::Internal {
   // that are not allocated inside of TVM.
   // This enables us to create NDArray from memory allocated by other
   // frameworks that are DLPack compatible
-  static void DLPackDeleter(void* ptr_obj) {
-    auto* ptr = static_cast<NDArray::Container*>(ptr_obj);
+  static void DLPackDeleter(TVMFFIObject* ptr_obj) {
+    auto* ptr =
+      
ffi::details::ObjectUnsafe::RawObjectPtrFromUnowned<NDArray::Container>(ptr_obj);
     DLManagedTensor* tensor = static_cast<DLManagedTensor*>(ptr->manager_ctx);
     if (tensor->deleter != nullptr) {
       (*tensor->deleter)(tensor);
@@ -128,8 +130,9 @@ struct NDArray::Internal {
   // Deleter for NDArray based on external DLTensor
   // The memory is allocated from outside and it is assumed that
   // responsibility for its freeing is also outside
-  static void SelfDeleter(void* ptr_obj) {
-    auto* ptr = static_cast<NDArray::Container*>(ptr_obj);
+  static void SelfDeleter(TVMFFIObject* ptr_obj) {
+    NDArray::Container* ptr =
+      
ffi::details::ObjectUnsafe::RawObjectPtrFromUnowned<NDArray::Container>(ptr_obj);
     delete ptr;
   }
   // Local create function which allocates tensor metadata
diff --git a/src/runtime/rpc/rpc_module.cc b/src/runtime/rpc/rpc_module.cc
index 57f2771501..aef4ed4a99 100644
--- a/src/runtime/rpc/rpc_module.cc
+++ b/src/runtime/rpc/rpc_module.cc
@@ -41,8 +41,8 @@ namespace tvm {
 namespace runtime {
 
 // deleter of RPC remote array
-static void RemoteNDArrayDeleter(void* obj) {
-  auto* ptr = static_cast<NDArray::Container*>(obj);
+static void RemoteNDArrayDeleter(TVMFFIObject* ptr_obj) {
+  auto* ptr = 
ffi::details::ObjectUnsafe::RawObjectPtrFromUnowned<NDArray::Container>(ptr_obj);
   RemoteSpace* space = static_cast<RemoteSpace*>(ptr->dl_tensor.data);
   if (ptr->manager_ctx != nullptr) {
     space->sess->FreeHandle(ptr->manager_ctx, kTVMNDArrayHandle);

Reply via email to