On 21 December 2016 at 20:01, Erik Bray <erik.m.b...@gmail.com> wrote:
> On Wed, Dec 21, 2016 at 2:10 AM, Nick Coghlan <ncogh...@gmail.com> wrote: > > Option 2: Similar to option 1, but using a custom type alias, rather than > > using a C99 bool directly > > > > The closest API we have to these semantics at the moment would be > > PyGILState_Ensure, so the following API naming might work for option 2: > > > > Py_ensure_t > > Py_ENSURE_NEEDS_INIT > > Py_ENSURE_INITIALIZED > > > > Respectively, these would just be aliases for bool, false, and true. > > > > And then modify the proposed PyThread_tss_create and PyThread_tss_delete > > APIs to accept a "Py_ensure_t *init_flag" in addition to their current > > arguments. > > That all sounds good--between the two option 2 looks a bit more explicit. > > Though what about this? Rather than adding another type, the original > proposal could be changed slightly so that Py_tss_t *is* partially > defined as a struct consisting of a bool, with whatever the native TLS > key is. E.g. > > typedef struct { > bool init_flag; > #if defined(_POSIX_THREADS) > pthreat_key_t key; > #elif defined (NT_THREADS) > DWORD key; > /* etc... */ > } Py_tss_t; > > Then it's just taking Masayuki's original patch, with the global bool > variables, and formalizing that by combining the initialized flag with > the key, and requiring the semantics you described above for > PyThread_tss_create/delete. > > For Python's purposes it seems like this might be good enough, with > the more general purpose pthread_once-like functionality not required. > Aye, I also thought of that approach, but talked myself out of it since there's no definable default value for pthread_key_t. However, C99 partial initialisation may deal with that for us (by zeroing the memory without actually assigning a typed value to it), and if it does, I agree it would be better to handle the initialisation flag automatically rather than requiring callers to do it. Cheers, Nick. -- Nick Coghlan | ncogh...@gmail.com | Brisbane, Australia
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/