[mod_python] PyThreadState_Delete: tstate is still current

Graham Dumpleton grahamd at dscpl.com.au
Wed Oct 12 18:04:34 EDT 2005


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
> > >
>






More information about the Mod_python mailing list