Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions cuda_core/cuda/core/_memory/_buffer.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -47,15 +47,15 @@ class Buffer:
is provided, the owner is kept alive but no deallocation is performed.
"""

@staticmethod
def _reduce_helper(mr, ipc_descriptor):
@classmethod
def _reduce_helper(cls, mr, ipc_descriptor):
...

def __reduce__(self) -> tuple[object, ...]:
...

@staticmethod
def from_handle(ptr: DevicePointerType, size: int, mr: MemoryResource | None=None, owner: object | None=None) -> Buffer:
@classmethod
def from_handle(cls, ptr: DevicePointerType, size: int, mr: MemoryResource | None=None, owner: object | None=None) -> Buffer:
"""Create a new :class:`Buffer` object from a pointer.

Parameters
Expand Down Expand Up @@ -303,4 +303,4 @@ class MemoryResource:
@property
def device_id(self) -> int:
"""Device ID associated with this memory resource, or -1 if not applicable."""
__all__ = ['Buffer', 'MemoryResource']
__all__ = ['Buffer', 'MemoryResource']
14 changes: 7 additions & 7 deletions cuda_core/cuda/core/_memory/_buffer.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -199,23 +199,23 @@ cdef class Buffer:
self._mem_attrs_inited.store(False)
return self

@staticmethod
def _reduce_helper(mr, ipc_descriptor):
@classmethod
def _reduce_helper(cls, mr, ipc_descriptor):
# The parent process's stream is not portable across processes, so the
# pickle path cannot thread an explicit stream through. Seed the
# imported buffer's deallocation with the current context's default
# stream; the receiver can override via buffer.close(stream).
return Buffer.from_ipc_descriptor(mr, ipc_descriptor, stream=default_stream())
return cls.from_ipc_descriptor(mr, ipc_descriptor, stream=default_stream())

def __reduce__(self) -> tuple[object, ...]:
# Unpickling performs a live CUDA IPC import from descriptor bytes in the
# pickle stream. Only deserialize Buffers from a trusted principal.
# Must not serialize the parent's stream!
return Buffer._reduce_helper, (self.memory_resource, self.ipc_descriptor)
return type(self)._reduce_helper, (self.memory_resource, self.ipc_descriptor)

@staticmethod
@classmethod
def from_handle(
ptr: DevicePointerType, size_t size, mr: MemoryResource | None = None,
cls, ptr: DevicePointerType, size_t size, mr: MemoryResource | None = None,
owner: object | None = None,
) -> Buffer:
"""Create a new :class:`Buffer` object from a pointer.
Expand All @@ -241,7 +241,7 @@ cdef class Buffer:
non-owning reference. The pointer will NOT be freed when the
:class:`Buffer` is closed or garbage collected.
"""
return Buffer._init(ptr, size, mr=mr, owner=owner)
return cls._init(ptr, size, mr=mr, owner=owner)

@classmethod
def from_ipc_descriptor(
Expand Down