This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author pdox
Recipients benjamin.peterson, ncoghlan, pdox, pitrou, r.david.murray, serhiy.storchaka, tim.peters
Date 2017-10-03.03:42:58
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1507002180.05.0.213398074469.issue31622@psf.upfronthosting.co.za>
In-reply-to
Content
If we don't want to change the type of get_ident(), there is another option.

We could have PyThread keep track of which thread ids (e.g. pthread_t) values are valid (meaning, the thread is still running). This could be tracked in a global data structure (protected by a mutex) internal to PyThread. This can be done automatically for threads created by PyThread, and threads where Python is running (in between PyGILState_Ensure/PyGILState_Release, or other entry functions). If PyThread had this ability, then pthread_kill, etc. could raise an exception when the thread_id is invalid.

The tricky part would be non-Python-created threads. There two obvious options there... one would be to provide explicit PyThread_Register/PyThread_Unregister functions that a thread could call to make itself known to PyThread. The other, would be to allow the use of unsafe thread_id's, as long as an override flag is provided. (e.g. pthread_kill(thread_id, sig, allow_unsafe=True).

To take the abstraction one step further, we could completely hide the OS-level thread identifier inside PyThread, and instead generate our own ids, guaranteeing that they will always be integers. (and perhaps also guaranteeing a higher level of uniqueness)

(This is not so unusual, as pthread_t is itself an abstraction, unrelated to kernel-level thread ids. On linux, the kernel identifies threads using globally unique TIDs, which can be fetched with SYS_gettid. This value does not match pthread_self(). With GLIBC, the value of pthread_t is (usually) a pointer to the bottom of the stack for the thread, which holds a thread descriptor (placed there by pthread_create). For this reason, pthread doesn't mesh well with threads that it didn't create (e.g., calling pthread_self in a thread which was created with clone(), will not do the right thing). pthread_kill is essentially a wrapper around tkill(), which first resolves the pthread_t into a TID.)
History
Date User Action Args
2017-10-03 03:43:00pdoxsetrecipients: + pdox, tim.peters, ncoghlan, pitrou, benjamin.peterson, r.david.murray, serhiy.storchaka
2017-10-03 03:43:00pdoxsetmessageid: <1507002180.05.0.213398074469.issue31622@psf.upfronthosting.co.za>
2017-10-03 03:43:00pdoxlinkissue31622 messages
2017-10-03 03:42:58pdoxcreate