[Python-3000] threading, part 2

Tim Peters tim.peters at gmail.com
Thu Aug 10 03:38:20 CEST 2006


[back and forth on PyThreadState_SetAsyncExc()]

[Tim]
>> Guido, do you have any idea now what the "number greater than one"
>> business is about?
>> ...
>> My impression has been that it would be an internal logic error if we
>> ever saw this count exceed 1.

[Guido]
> Right, I think that's it. I guess I was in a grumpy mood when I wrote
> this

I forgot that we talked about this close to two years ago:

    http://www.python.org/sf/1069160

As comments there say, it's still the case that it's clearly possible
to provoke this into deadlocking (but unlikely if you're not
deliberately trying to).

> (and Just & Alex never ended up using it!).

They spoke for themselves on this matter in that bug report ;-)

>> While I'm at it, I expect:
>>
>>                 Py_CLEAR(p->async_exc);
>>                 Py_XINCREF(exc);
>>                 p->async_exc = exc;
>>
>> is better written:
>>
>>                 Py_XINCREF(exc);
>>                 Py_CLEAR(p->async_exc);
>>                 p->async_exc = exc;
>>
>> for the same reason one should always incref B before decrefing A in
>>
>>     A = B
>>
>> ...

> That reason that A and B might already be the same object, right?

Right, or that B's only owned reference is on a chain only reachable
from A, and in either case A's incoming refcount is 1.  The suggested
deadlock-avoiding rewrite in the patch comment addresses that too.

...

>>> I'm +0 on [exposing] this [from Python].

>> Me too, although it won't stay that simple, and I'm clear as mud on
>> how implementations other than CPython could implement this.

> Another good reason to keep it accessible from the C API only. Now I'm
> -0 on adding it. I suggest that if someone really wants this
> accessible from Python, they should research how Jython, IronPython,
> PyPy and Stackless could handle this, and report their research in a
> PEP.

As a full-blown language feature, I'm -1 unless that work is done
first.  I'm still +0 on adding it to CPython if it's given a
leading-underscore name and docs to make clear that it's a
CPython-specific hack that may never work under any other
implementation.


More information about the Python-3000 mailing list