On Thu, Dec 14, 2017 at 12:00 PM, Antoine Pitrou <solip...@pitrou.net> wrote: > On Thu, 14 Dec 2017 17:00:10 +1000 > Nick Coghlan <ncogh...@gmail.com> wrote: >> On 14 Dec. 2017 9:19 am, "Antoine Pitrou" <solip...@pitrou.net> wrote: >> >> >> Hello, >> >> After debugging a crash on AppVeyor for a submitter's PR >> (see https://github.com/python/cpython/pull/4611 ), I came to the >> following diagnosis: converting the "atexit" module (which is a >> built-in C extension) to PEP 489 multiphase initialization can lead to >> its m_traverse function (and presumably also m_clear and m_free) to be >> called while not module state is yet registered: that is, >> `PyModule_GetState(self)` when called from m_traverse returns NULL! >> >> Is that an expected or known subtlety? >> >> >> Not that I'm aware of, so I'd be inclined to classify it as a bug in the >> way we're handling multi-phase initialisation unless/until we determine >> there's no way to preserve the existing invariant from the single phase >> case. > > Speaking of which, the doc is not very clear: is PEP 489 required for > multi-interpreter support or is PyModule_GetState() sufficient?
Yes, it is possible to have proper subinterpreter support without multi-phase init. _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com