Skip to content

Commit 868b4c3

Browse files
authored
BUG: NVML system events may only be registered once per process (NVIDIA#1992)
* BUG: NVML system events may only be registered once per process * Avoid possible free of NULL pointer on Windows
1 parent 97c5b2a commit 868b4c3

2 files changed

Lines changed: 9 additions & 3 deletions

File tree

cuda_core/cuda/core/system/_system_events.pyx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,15 @@ cdef class RegisteredSystemEvents:
8181

8282
initialize()
8383

84+
self._event_set = 0
8485
self._event_set = nvml.system_event_set_create()
8586
# If this raises, the event needs to be freed and this is handled by
8687
# this class's __dealloc__ method.
8788
nvml.system_register_events(event_bitmask, self._event_set)
8889

8990
def __dealloc__(self):
90-
nvml.system_event_set_free(self._event_set)
91+
if self._event_set != 0:
92+
nvml.system_event_set_free(self._event_set)
9193

9294
def wait(self, timeout_ms: int = 0, buffer_size: int = 1) -> SystemEvents:
9395
"""

cuda_core/tests/system/test_system_events.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
1+
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
22
#
33
# SPDX-License-Identifier: Apache-2.0
44

@@ -22,6 +22,10 @@ def test_register_events():
2222

2323
# Also, some hardware doesn't support any event types.
2424

25-
events = system.register_events([system.SystemEventType.GPU_DRIVER_UNBIND])
25+
try:
26+
events = system.register_events([system.SystemEventType.GPU_DRIVER_UNBIND])
27+
except system.UnknownError:
28+
pytest.skip("system events may only be registered once per process")
29+
2630
with pytest.raises(system.TimeoutError):
2731
events.wait(timeout_ms=500, buffer_size=1)

0 commit comments

Comments
 (0)