Skip to content

gh-117398: datetime: Support per-interpreter C-API - #117399

Closed
neonene wants to merge 7 commits into
python:mainfrom
neonene:dtstate
Closed

gh-117398: datetime: Support per-interpreter C-API#117399
neonene wants to merge 7 commits into
python:mainfrom
neonene:dtstate

Conversation

@neonene

@neoneneneonene commented Mar 31, 2024

Copy link
Copy Markdown
Contributor

This places C-API structure on a module state, which can be accessed through PyInterpreterState or a capsule.

Doc:

For modules using multi-phase initialization, e.g. PyModule_FromDefAndSpec(),
a separate module object is created and initialized for each interpreter.

@neonene
neonene marked this pull request as draft March 31, 2024 04:33
PyObject *capsule = PyCapsule_New(capi, PyDateTime_CAPSULE_NAME,
datetime_destructor);
set_datetime_capi(st);
PyObject *capsule = PyCapsule_New(&st->capi, PyDateTime_CAPSULE_NAME, NULL);

@Eclips4Eclips4Mar 31, 2024

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Can you explain why do you pass a NULL as a capsule destructor?
Is there any reason not to have destructor for this capsule?

@neoneneneoneneMar 31, 2024

Copy link
Copy Markdown
ContributorAuthor

Choose a reason for hiding this comment

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

In this case, the capsule just views a memory allocated and freed by the moduleobject.

if (m->md_state!=NULL)
PyMem_Free(m->md_state);

Comment threadModules/_datetimemodule.c Outdated
@neonene

Copy link
Copy Markdown
ContributorAuthor

No futher experiment here.

@neoneneneonene closed this Mar 31, 2024
@neonene

Copy link
Copy Markdown
ContributorAuthor

On second thought, exposing a module state to a user is dangerous.

@neonene
neonene deleted the dtstate branch April 2, 2024 12:56
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@neonene@Eclips4