diff --git a/cuda_pathfinder/cuda/pathfinder/_dynamic_libs/load_dl_linux.py b/cuda_pathfinder/cuda/pathfinder/_dynamic_libs/load_dl_linux.py index 4bce75d109c..8dbb72a8502 100644 --- a/cuda_pathfinder/cuda/pathfinder/_dynamic_libs/load_dl_linux.py +++ b/cuda_pathfinder/cuda/pathfinder/_dynamic_libs/load_dl_linux.py @@ -165,7 +165,8 @@ def load_with_system_search(desc: LibDescriptor) -> LoadedDL | None: A LoadedDL object if successful, None if the library cannot be loaded Raises: - RuntimeError: If the library is loaded but no expected symbol is found + OSError: If the library is loaded but its absolute path cannot be + resolved via dlinfo (surfaced from abs_path_for_dynamic_library). """ for soname in _candidate_sonames(desc): try: @@ -173,9 +174,10 @@ def load_with_system_search(desc: LibDescriptor) -> LoadedDL | None: except OSError: pass else: + # abs_path_for_dynamic_library never returns None: it returns a + # resolved path or raises OSError. Let that error surface rather + # than masking it, consistent with the deterministic-loader policy. abs_path = abs_path_for_dynamic_library(desc.name, handle) - if abs_path is None: - raise RuntimeError(f"No expected symbol for libname={desc.name!r}") return LoadedDL(abs_path, False, handle._handle, "system-search") return None diff --git a/cuda_pathfinder/cuda/pathfinder/_dynamic_libs/load_dl_windows.py b/cuda_pathfinder/cuda/pathfinder/_dynamic_libs/load_dl_windows.py index a296813aa29..5069a624790 100644 --- a/cuda_pathfinder/cuda/pathfinder/_dynamic_libs/load_dl_windows.py +++ b/cuda_pathfinder/cuda/pathfinder/_dynamic_libs/load_dl_windows.py @@ -69,11 +69,10 @@ def add_dll_directory(dll_abs_path: str) -> None: dirpath = os.path.dirname(dll_abs_path) assert os.path.isdir(dirpath), dll_abs_path - # Add the DLL directory to the search path - result = kernel32.AddDllDirectory(dirpath) - if not result: - # Fallback: just update PATH if AddDllDirectory fails - pass + # Add the DLL directory to the native search path. AddDllDirectory only + # affects the LOAD_LIBRARY_SEARCH_USER_DIRS search; PATH is updated + # unconditionally below to also cover legacy dependent-DLL resolution. + kernel32.AddDllDirectory(dirpath) # Update PATH as a fallback for dependent DLL resolution curr_path = os.environ.get("PATH")