<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2016-12-20 22:30 GMT+09:00 Erik Bray <span dir="ltr"><<a href="mailto:erik.m.bray@gmail.com" target="_blank">erik.m.bray@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">This is probably an implementation detail, but ISTM that even with<br>
PyThread_call_once, it will be necessary to reset any used once_flags<br>
manually in PyOS_AfterFork, essentially for the same reason the<br>
autoTLSkey is reset there currently...<br>
</blockquote></div><br>Deleting threads key is executed on *_Fini functions, but Py_FinalizeEx function that calls *_Fini functions doesn't terminate CPython interpreter. Furthermore, source comment and document have said description about reinitialization after calling Py_FinalizeEx. [1] [2] That is to say there is an implicit possible that is reinitialization contrary to name "call_once" on a process level. Therefore, if CPython interpreter continues to allow reinitialization, I'd suggest to rename the call_once API to avoid misreading semantics. (for example, safe_init, check_init)<br><br></div><div class="gmail_extra">Best regards,<br></div><div class="gmail_extra">Masayuki<br></div><div class="gmail_extra"><br>[1] <a href="https://hg.python.org/cpython/file/default/Python/pylifecycle.c#l170">https://hg.python.org/cpython/file/default/Python/pylifecycle.c#l170</a><br>[2] <a href="https://docs.python.org/dev/c-api/init.html#c.Py_FinalizeEx">https://docs.python.org/dev/c-api/init.html#c.Py_FinalizeEx</a><br></div></div>