[mod_python] PyThreadState_Delete: tstate is still current

Graham Dumpleton grahamd at dscpl.com.au
Wed Oct 12 18:13:58 EDT 2005


Now I am even more blind. I got that the wrong way around. You
have the 3.2 mod_python.apache module, but the Apache module
is still that for 2.7. Ie., only mod_python Apache module for 2.7
would be attempting to call init() with 0 arguments where 2 is
expected.

This would explain why thread state problem is still there as Apache
module hasn't changed.

Blame Apple for this, trying to read up on the new video iPod and
it is distracting my thoughts. :-)

Graham

On 13/10/2005, at 8:04 AM, Graham Dumpleton wrote:

> Okay, I am blind. Unfortunate that the thread state problem didn't
> go away, but only just noticed in the error messages the init()
> call argument mismatch.
>
> The problem you are having is that the Apache module is for
> mod_python 3.2, but it is still finding the Python modules, ie.,
> the mod_python.apache module, from your old mod_python 2.7
> installation.
>
> In 2.7, init() took no arguments. In 3.2 it takes two arguments.
>
> Sorry, didn't notice that before. Thus, get rid of the mod_python 2.7
> Python modules and ensure 3.2 versions are installed correctly.
>
> Still think something isn't right with the thread state deletion
> code. Are you absolutely sure that your newly compiled Apache
> module is being used?
>
> Graham
>
> On 12/10/2005, at 9:33 AM, Peter Sanchez wrote:
>
>> Well, I did the patches you suggested, and it didn't help much.  
>> Here is the log snippet:
>>
>> [Tue Oct 11 16:17:07 2005] [notice] Apache/2.0.54 (FreeBSD) PHP/ 
>> 4.4.0 mod_python/3.2.0b Python/2.4.1 configured -- resuming normal  
>> operati
>> ons
>> [Tue Oct 11 16:17:07 2005] [notice] child pid 71664 exit signal  
>> Abort trap (6)
>> [Tue Oct 11 16:17:07 2005] [notice] child pid 71663 exit signal  
>> Abort trap (6)
>> [Tue Oct 11 16:17:07 2005] [notice] child pid 71660 exit signal  
>> Abort trap (6)
>> [Tue Oct 11 16:17:07 2005] [notice] child pid 71654 exit signal  
>> Abort trap (6)
>> [Tue Oct 11 16:17:07 2005] [notice] child pid 71640 exit signal  
>> Abort trap (6)
>> [Tue Oct 11 16:17:07 2005] [notice] child pid 71634 exit signal  
>> Abort trap (6)
>> [Tue Oct 11 16:17:07 2005] [notice] child pid 71624 exit signal  
>> Abort trap (6)
>> [Tue Oct 11 16:17:07 2005] [notice] child pid 69509 exit signal  
>> Abort trap (6)
>> [Tue Oct 11 16:17:07 2005] [notice] child pid 69490 exit signal  
>> Abort trap (6)
>> [Tue Oct 11 16:17:07 2005] [notice] child pid 69470 exit signal  
>> Abort trap (6)
>> [Tue Oct 11 16:17:07 2005] [notice] child pid 69437 exit signal  
>> Abort trap (6)
>> [Tue Oct 11 16:17:07 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 16:17:08 2005] [notice] child pid 71632 exit signal  
>> Abort trap (6)
>> [Tue Oct 11 16:17:09 2005] [error] make_obcallback: could not call  
>> init.\n
>> TypeError: init() takes exactly 2 arguments (0 given)
>>
>>
>> Over and over again ;) I went back to 3.1.4, since I am testing on  
>> a live server (no other choice unfortunately.)
>>
>> I also tried writing a basic function that does nothing but  
>> display a session id, no other modules included and it gave the  
>> same results. You guys probably knew that was the case, but just  
>> an FYI.
>>
>> Thanks again,
>>
>> Peter
>>
>> On 10/11/05, Graham Dumpleton <grahamd at dscpl.com.au> 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