Skip to content

Conversation

@neonene
Copy link
Contributor

@neoneneneonene commented Mar 31, 2024

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.

@neoneneneonene 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);
Copy link
Member

@Eclips4Eclips4Mar 31, 2024

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?

Copy link
ContributorAuthor

@neoneneneoneneMar 31, 2024

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);

@neonene
Copy link
ContributorAuthor

No futher experiment here.

@neoneneneonene closed this Mar 31, 2024
@neonene
Copy link
ContributorAuthor

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

@neoneneneonene 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