Skip to content

Commit b500268

Browse files
authored
Fix dangling pointer problem in _linker.py (#516)
* `cuLinkAddData()` with `const_char_keep_alive` INCLUDING DEBUGGING CODE * Remove all debugging code. * Fix silly oversight.
1 parent f903d98 commit b500268

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

cuda_core/cuda/core/experimental/_linker.py

+7-3
Original file line numberDiff line numberDiff line change
@@ -349,11 +349,12 @@ class Linker:
349349
"""
350350

351351
class _MembersNeededForFinalize:
352-
__slots__ = ("handle", "use_nvjitlink")
352+
__slots__ = ("handle", "use_nvjitlink", "const_char_keep_alive")
353353

354354
def __init__(self, program_obj, handle, use_nvjitlink):
355355
self.handle = handle
356356
self.use_nvjitlink = use_nvjitlink
357+
self.const_char_keep_alive = []
357358
weakref.finalize(program_obj, self.close)
358359

359360
def close(self):
@@ -390,27 +391,30 @@ def _add_code_object(self, object_code: ObjectCode):
390391
data = object_code._module
391392
assert_type(data, bytes)
392393
with _exception_manager(self):
394+
name_str = f"{object_code._handle}_{object_code._code_type}"
393395
if _nvjitlink:
394396
_nvjitlink.add_data(
395397
self._mnff.handle,
396398
self._input_type_from_code_type(object_code._code_type),
397399
data,
398400
len(data),
399-
f"{object_code._handle}_{object_code._code_type}",
401+
name_str,
400402
)
401403
else:
404+
name_bytes = name_str.encode()
402405
handle_return(
403406
_driver.cuLinkAddData(
404407
self._mnff.handle,
405408
self._input_type_from_code_type(object_code._code_type),
406409
data,
407410
len(data),
408-
f"{object_code._handle}_{object_code._code_type}".encode(),
411+
name_bytes,
409412
0,
410413
None,
411414
None,
412415
)
413416
)
417+
self._mnff.const_char_keep_alive.append(name_bytes)
414418

415419
def link(self, target_type) -> ObjectCode:
416420
"""

0 commit comments

Comments
 (0)