naive misuse? (of PyThreadState_SetAsyncExc)

Tim Peters tim.peters at gmail.com
Mon Aug 28 19:31:46 EDT 2006


[johan2sson at gmail.com]
>> The documentation for PyThreadState_SetAsyncExc says "To prevent naive
>> misuse, you must write your own C extension to call this". Anyone care
>> to list a few examples of such naive misuse?

[and again]
> No? I'll take that then as proof that it's impossible to misuse the
> function.

That's wise ;-)  Stopping a thread asynchronously is in /general/ a
dangerous thing to do, and for obvious reasons.  For example, perhaps
the victim thread is running in a library routine at the time the
asynch exception is raised, and getting forcibly ejected from the
normal control flow leaves a library-internal mutex locked forever.
Or perhaps a catch-all "finally:" clause in the library manages to
release the mutex, but leaves the internals in an inconsistent state.
Etc.  The same kinds of potential disasters accout for why Java
deprecated its versions of this gimmick:

    http://java.sun.com/j2se/1.3/docs/guide/misc/threadPrimitiveDeprecation.html

That said, you can invoke PyThreadState_SetAsyncExc() from Python
using the `ctypes` module (which will be included in 2.5, and is
available as an extension module for earlier Pythons).



More information about the Python-list mailing list