From 3a39e33ee48b3d6630288109ccd87172e8c5c631 Mon Sep 17 00:00:00 2001 From: Nadeshiko Manju Date: Fri, 25 Apr 2025 08:40:01 +0800 Subject: gh-131591: Reset RemoteDebuggerSuupport state after fork (#132793) Co-authored-by: Pablo Galindo Salgado --- .../2025-04-22-19-00-03.gh-issue-131591.CdEqBr.rst | 1 + Modules/posixmodule.c | 10 ++++++++++ 2 files changed, 11 insertions(+) create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2025-04-22-19-00-03.gh-issue-131591.CdEqBr.rst diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2025-04-22-19-00-03.gh-issue-131591.CdEqBr.rst b/Misc/NEWS.d/next/Core_and_Builtins/2025-04-22-19-00-03.gh-issue-131591.CdEqBr.rst new file mode 100644 index 0000000..e237649 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2025-04-22-19-00-03.gh-issue-131591.CdEqBr.rst @@ -0,0 +1 @@ +Reset any :pep:`768` remote debugging pending call in children after :func:`os.fork` calls. diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index b7300de..8d7131b 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -677,6 +677,14 @@ PyOS_AfterFork_Parent(void) run_at_forkers(interp->after_forkers_parent, 0); } +static void +reset_remotedebug_data(PyThreadState *tstate) +{ + tstate->remote_debugger_support.debugger_pending_call = 0; + memset(tstate->remote_debugger_support.debugger_script_path, 0, MAX_SCRIPT_PATH_SIZE); +} + + void PyOS_AfterFork_Child(void) { @@ -710,6 +718,8 @@ PyOS_AfterFork_Child(void) goto fatal_error; } + reset_remotedebug_data(tstate); + // Remove the dead thread states. We "start the world" once we are the only // thread state left to undo the stop the world call in `PyOS_BeforeFork`. // That needs to happen before `_PyThreadState_DeleteList`, because that -- cgit v0.12