From af3347ae1e3342f2aa0a47e924d563b928af2fef Mon Sep 17 00:00:00 2001 From: Oleksandr Pavlyk <21087696+oleksandr-pavlyk@users.noreply.github.com> Date: Thu, 16 Jan 2025 09:28:22 -0600 Subject: [PATCH] Initialization of dpctl to set subprocess to not use FORK on Linux Fork is not supported by DPC++ runtime. Attempt to use fork may cause hangs, or incorrect behavior. In particular, it may affect working on oneapi-gdb. To enable smooth experience in debugging kernels launched by dpctl, or extensions built using dpctl C++ API, initialization of dpctl on Linux, imports subprocess and sets its configuration variables to use SPAWN over FORK https://docs.python.org/3/library/subprocess.html#disabling-use-of-vfork-or-posix-spawn --- dpctl/_init_helper.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/dpctl/_init_helper.py b/dpctl/_init_helper.py index e3903c7156..f07b84171b 100644 --- a/dpctl/_init_helper.py +++ b/dpctl/_init_helper.py @@ -32,3 +32,20 @@ os.add_dll_directory(dll_dir) del is_venv_win32 + +is_linux = sys.platform.startswith("linux") + +if is_linux: + # forking is not supported by device drivers + # Configure subprocess (used by versioneer) to + # use SPAWN method over FORK method to enable + # use of gdb-oneapi to debug code launched by + # native extensions that used dpctl C/C++ API + import subprocess + + subprocess._USE_VFORK = False + subprocess._USE_POSIX_SPAWN = True + # remove qualifier from this namespace + del subprocess + +del is_linux