[mod_python] PyThreadState_Delete: tstate is still current

Gregory (Grisha) Trubetskoy grisha at modpython.org
Wed Oct 12 08:08:31 EDT 2005


You may be onto something here... I'll see about testing this out on my 
FreeBSD system.

Grisha

On Tue, 11 Oct 2005, Graham Dumpleton wrote:

> Making an educated guess (???), in src/mod_python.c, can you modify the
> release_interpreter() function and change:
>
> static void release_interpreter(void)
> {
>    PyThreadState *tstate = PyThreadState_Get();
> #ifdef WITH_THREAD
>    PyEval_ReleaseThread(tstate);
> #endif
>    PyThreadState_Delete(tstate);
> }
>
> to:
>
> static void release_interpreter(void)
> {
>    PyThreadState *tstate = PyThreadState_Get();
> #ifdef WITH_THREAD
>    PyEval_ReleaseThread(tstate);
> #else
>    PyThreadState_Swap(NULL);
> #endif
>    PyThreadState_Delete(tstate);
> }
>
> The original doesn't seem quite right to me because it wouldn't revert
> the thread state before deleting it when threads aren't used. There is a
> similar bit of code in get_interpreter() where it has:
>
>        if (!idata->obcallback)
>        {
> #ifdef WITH_THREAD
>            PyEval_ReleaseThread(tstate);
> #endif                           PyThreadState_Delete(tstate);
>
> which perhaps should be:
>
>        if (!idata->obcallback)
>        {
> #ifdef WITH_THREAD
>                    PyEval_ReleaseThread(tstate);
> #else
>                    PyThreadState_Swap(NULL);
> #endif
>                    PyThreadState_Delete(tstate);
>
> In this case it only gets invoked when mod_python callback can't be
> created.
>
> If this is indeed the problem, in mod_python 3.1.3, the callback may be
> created okay so it only dies in release_interpreter(). In mod_python 3.2
> though, maybe the callback creation itself is failing meaning it would
> die everytime a child process is created.
>
> If someone has the time and a non BSD platform could you independently
> build a version of Python without thread support and then build
> mod_python 3.2 and see if you get similar crashes. Ie., I feel this
> could be wrong for no threads and not be BSD specific. From what I have
> seen, FreeBSD is the only platform that still doesn't build in threads
> to Python by default and thus why it isn't seen more. I can't do it
> personally as have MacOS X and one has to be careful with multiple
> Python installations there in case one trashes system one accidentally.
> Would rather not risk it. :-)
>
> Graham
>
> Peter Sanchez wrote ..
>> Thanks for the reference. I tried adding the following line, no real help.
>> So I rebuilt apache2 and mod_python and made sure it didn't have threads
>> support. Now, I still get the same error message, but the entire page is
>> loading correctly?
>>
>> Same log entries though:
>>
>> Fatal Python error: PyThreadState_Delete: tstate is still current
>> [Tue Oct 11 13:05:15 2005] [notice] child pid 256 exit signal Abort trap
>> (6)
>>
>> I am wondering if at this point, its not related to Cheetah Template engine,
>> which I use for my templates (will be converting to psp template system
>> very
>> soon) I am not sure if that attempts any threaded functions, etc. Also,
>> I
>> dont know that if it was trying something like that, if it would effect
>> mod_python in this way.
>>
>> Is there any traces I can run, etc. to help debug this issue?
>>
>> Thanks,
>>
>> Peter
>>
>> On 10/11/05, Jim Gallacher <jg.lists at sympatico.ca> wrote:
>>>
>>> Peter Sanchez wrote:
>>>> OK, I tried 3.2.2b from source. Now, when I start apache, the logs
>> just
>>>> go into a loop with the same errors as before :)
>>>>
>>>> [Tue Oct 11 10:26:14 2005] [notice] Apache/2.0.54 (FreeBSD) PHP/4.4.0
>>>> mod_python/3.2.0b Python/2.4.1 configured -- resuming normal operations
>>>> [Tue Oct 11 10:26:14 2005] [notice] child pid 26791 exit signal Abort
>>>> trap (6)
>>>> [Tue Oct 11 10:26:14 2005] [notice] child pid 26318 exit signal Abort
>>>> trap (6)
>>>> [Tue Oct 11 10:26:14 2005] [notice] child pid 26317 exit signal Abort
>>>> trap (6)
>>>> [Tue Oct 11 10:26:14 2005] [notice] child pid 24178 exit signal Abort
>>>> trap (6)
>>>> [Tue Oct 11 10:26:14 2005] [notice] child pid 24162 exit signal Abort
>>>> trap (6)
>>>> [Tue Oct 11 10:26:14 2005] [notice] child pid 24148 exit signal Abort
>>>> trap (6)
>>>> [Tue Oct 11 10:26:14 2005] [notice] child pid 24133 exit signal Abort
>>>> trap (6)
>>>> [Tue Oct 11 10:26:14 2005] [notice] child pid 24122 exit signal Abort
>>>> trap (6)
>>>> [Tue Oct 11 10:26:14 2005] [notice] child pid 24050 exit signal Abort
>>>> trap (6)
>>>> [Tue Oct 11 10:26:14 2005] [notice] child pid 24033 exit signal Abort
>>>> trap (6)
>>>> [Tue Oct 11 10:26:14 2005] [notice] child pid 23318 exit signal Abort
>>>> trap (6)
>>>> [Tue Oct 11 10:26:14 2005] [notice] child pid 23285 exit signal Abort
>>>> trap (6)
>>>> [Tue Oct 11 10:26:14 2005] [notice] child pid 23266 exit signal Abort
>>>> trap (6)
>>>> [Tue Oct 11 10:26:14 2005] [notice] child pid 23195 exit signal Abort
>>>> trap (6)
>>>> [Tue Oct 11 10:26:14 2005] [error] make_obcallback: could not call
>>> init.\n
>>>> TypeError: init() takes exactly 2 arguments (0 given)
>>>> Fatal Python error: PyThreadState_Delete: tstate is still current
>>>> [Tue Oct 11 10:26:14 2005] [error] make_obcallback: could not call
>>> init.\n
>>>> TypeError: init() takes exactly 2 arguments (0 given)
>>>> Fatal Python error: PyThreadState_Delete: tstate is still current
>>>>
>>>> Note, these were being given while NOT loading my mod_python code,
>> I
>>>> think it was doing this for every 'normal' apache instance. I quickly
>>>> reverted back to the last setup (mod_pyton/3.1.4)
>>>>
>>>> Any other ideas guys?
>>>>
>>>> Thanks,
>>>>
>>>> Peter
>>>>
>>>
>>> This sounds like the problem I was having trying to get the 3.2.2b unit
>>> tests to pass on FreeBSD. This was discussed on the python-dev list
>>> around Sept 10.
>>>
>>> You can read the archive on gmane at
>>> http://comments.gmane.org/gmane.comp.apache.mod-python.devel/1465
>>>
>>> Grisha suggested you can see this sort of problem on FreeBSD where
>>> Python is threaded and Apache is not and offered the following:
>>>
>>> If you built apache without thread support, you may need to add the
>>> following lines to $PREFIX/sbin/envvars:
>>>
>>> LD_PRELOAD=/usr/lib/libc_r.so
>>> export LD_PRELOAD
>>>
>>> Regards,
>>> Jim
>>>
> _______________________________________________
> Mod_python mailing list
> Mod_python at modpython.org
> http://mailman.modpython.org/mailman/listinfo/mod_python
>


More information about the Mod_python mailing list