From: Nadeshiko Manju Date: Fri, 25 Apr 2025 00:40:01 +0000 (+0800) Subject: gh-131591: Reset RemoteDebuggerSuupport state after fork (#132793) X-Git-Tag: v3.14.0b1~312 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3a39e33ee48b3d6630288109ccd87172e8c5c631;p=thirdparty%2FPython%2Fcpython.git gh-131591: Reset RemoteDebuggerSuupport state after fork (#132793) Co-authored-by: Pablo Galindo Salgado --- 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 000000000000..e237649e5920 --- /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 b7300def8dc7..8d7131b2eacf 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