Skip to content

Conversation

@brandtbucher
Copy link
Member

@brandtbucherbrandtbucher commented Nov 9, 2022

@brandtbucherbrandtbucher added type-bug An unexpected behavior, bug, or error interpreter-core (Objects, Python, Grammar, and Parser dirs) needs backport to 3.11 only security fixes labels Nov 9, 2022
@brandtbucherbrandtbucher self-assigned this Nov 9, 2022
Copy link
Contributor

@kumaraditya303kumaraditya303 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Copy link
Member

@ericsnowcurrentlyericsnowcurrently left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

I've pointed out two places where a comment would be appropriate. I'm approving the PR under the assumption you'll take care of those.

memcpy(tstate,
&initial._main_interpreter._initial_thread,
sizeof(*tstate));
tstate->_static= false;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add a note pointing to PyThreadState_INIT() and indicating that fields set there should be adjusted here as appropriate.

// Set to _PyInterpreterState_INIT.
memcpy(interp, &initial._main_interpreter,
sizeof(*interp));
interp->_static= false;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Likewise, a note pointing to PyInterpreterState_INIT().

@ericsnowcurrently
Copy link
Member

Thanks for fixing this, BTW.

@brandtbucher
Copy link
MemberAuthor

@pablogsal, leak tests didn't catch this because we use the "raw" domain to allocate PyThreadState and PyInterpreterState.

@pablogsal
Copy link
Member

Oh interesting, can you confirm that changing the domain to memory makes the test fail?

@brandtbucher
Copy link
MemberAuthor

brandtbucher commented Nov 9, 2022

Oh interesting, can you confirm that changing the domain to memory makes the test fail?

You can't. :)

Fatal Python error: _PyMem_DebugCalloc: Python memory allocator called without holding the GIL Python runtime state: preinitialized 

See this comment:

cpython/Python/pystate.c

Lines 818 to 821 in 58ee5d8

// We don't need to allocate a thread state for the main interpreter
// (the common case), but doing it later for the other case revealed a
// reentrancy problem (deadlock). So for now we always allocate before
// taking the interpreters lock. See GH-96071.

@brandtbucherbrandtbucher merged commit 283ab0e into python:mainNov 9, 2022
@miss-islington
Copy link
Contributor

Thanks @brandtbucher for the PR 🌮🎉.. I'm working now to backport this PR to: 3.11.
🐍🍒⛏🤖

@bedevere-bot
Copy link

GH-99301 is a backport of this pull request to the 3.11 branch.

miss-islington pushed a commit to miss-islington/cpython that referenced this pull request Nov 9, 2022
…onGH-99268) (cherry picked from commit 283ab0e) Co-authored-by: Brandt Bucher <brandtbucher@microsoft.com>
@bedevere-botbedevere-bot removed the needs backport to 3.11 only security fixes label Nov 9, 2022
miss-islington added a commit that referenced this pull request Nov 9, 2022
(cherry picked from commit 283ab0e) Co-authored-by: Brandt Bucher <brandtbucher@microsoft.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

interpreter-core(Objects, Python, Grammar, and Parser dirs)type-bugAn unexpected behavior, bug, or error

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@brandtbucher@ericsnowcurrently@pablogsal@miss-islington@bedevere-bot@kumaraditya303