zlibmodule threadsafety changes: RFC
Titus Brown
t at chabry.caltech.edu
Sat Aug 18 18:24:02 EDT 2001
In article <9ljh530253k at enews2.newsguy.com>,
Alex Martelli <aleaxit at yahoo.com> wrote:
>"Titus Brown" <t at chabry.caltech.edu> wrote in message
>news:9lin1v$d57$1 at chabry.caltech.edu...
> ...
>> Aren't input parameters INCREF'd on the function call into C? I can't
>
>Nope: if the C code wants to keep hold of them it needs to incref
>them itself (only while the specific Python-called C function itself is
>executing is the object guaranteed not to go away).
>
>> imagine it'd be very cool to have something like:
>>
>> a = "hello there!"
>> fn(a)
>> print a
>> (core dump)
>
>Could happen, if fn decref'd a by more than it addref'd.
Well, yes, and that would be a bug ;). But I don't have to worry about
the following situation, do I? (forgive the pseudocode)
c_function(Py_String string)
{
/* do stuff */
BEGIN ALLOW_THREADS
do_something(string)
END_ALLOW_THREADS
/* do stuff */
}
and then:
---
thread1: thread2:
c_function(s)
-->threadswap del(s)
<core dump, s no longer valid>
---
If thread1 and thread2 were accessing s in different namespaces, then I
would certainly not have to worry about it. However, if they used s in
the *same* namespace, then only the fact that 's' had been passed into
c_function would be protecting it... Argh, I need to go look into the C
code running this stuff Python!
thanks again,
--titus
More information about the Python-list
mailing list