[issue31622] Make threading.get_ident() return an opaque type

pdox report at bugs.python.org
Thu Sep 28 20:39:32 EDT 2017


New submission from pdox <pdox at alum.mit.edu>:

Currently, Python exposes "thread identifiers" as unsigned long values across multiple modules:

threading.get_ident() -> Returns an integer thread id
sys._current_frames() -> Dictionary keys are integer thread ids
signal.pthread_kill() -> Accepts an arbitrary integer thread id

In reality, OS level thread identifiers are opaque types. On a system with pthreads, the thread_id that Python provides is merely pthread_t casted to unsigned long. This works today, but is in violation of the standard, and could break on systems with exotic pthread_t.

There is also the ability to introduce undefined behavior, such as sending a signal to an invalid thread id:

>>> signal.pthread_kill(42, signal.SIGHUP)
Segmentation fault (core dumped)

Changing the thread identifiers to an opaque type (which also tracks the validity of the thread id, for blocking use of expired system thread ids) will solve these two issues.

----------
components: Library (Lib)
messages: 303291
nosy: pdox
priority: normal
severity: normal
status: open
title: Make threading.get_ident() return an opaque type
type: enhancement
versions: Python 3.7

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue31622>
_______________________________________


More information about the Python-bugs-list mailing list