[mod_python] OS X / Apache 2 / mod_python bug

Graham Dumpleton grahamd at dscpl.com.au
Tue Mar 15 16:31:30 EST 2005

Thanks for going to all the effort, a lot of times when suggesting 
things on
the mailing list, you simply never hear from people again, so you have 
idea if what you suggested worked or not.

See further suggestions below.

On 16/03/2005, at 7:25 AM, Jamie Kirkpatrick wrote:
>> At this point things get a bit trickier as one is dealing with the C 
>> code.
>> It is worth noting though that most instances of where a 500 response 
>> are
>> generated in the mod_python.c file are preceded by message logging. 
>> The
>> only ones that aren't are all of the form:
>>     /* get/create interpreter */
>>     idata = get_interpreter(interp_name, req->server);
>>     if (!idata)
>> Not being able to get/create the interpreter is pretty severe and if 
>> that
>> was happening then no Python code at all would be getting executed. I 
>> am
>> not sure why this situation couldn't be logged as well. Thus instead 
>> of
>> that above, have:
>>     if (!idata) {
>>         ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, req,
>>                       "python_handler: Can't get/create 
>> interpreter.");
>>     }
> OK - so this does indeed seem to be the case.  On a restart I get the 
> message logged:
> [Tue Mar 15 20:20:55 2005] [notice] Apache/2.0.53 (Unix) DAV/2 
> mod_python/3.1.3 Python/2.4 configured -- resuming normal operations
> [Tue Mar 15 20:20:59 2005] [error] [client] 
> python_handler: Can't get/create interpreter.

Next thing to try would be to add logging inside the get_interpreter() 
Suggest logging the "name" input parameter supplied to the function, 
but more
importantly log whether the "interpreters" global variable is actually 
set when
the function is being called. Ie.,

     if (!interpreters) {
         ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, req,
                       "python_handler: interpreters dictionary not 
         return NULL;

There is a return near the end of the function as well which doesn't 
log anything
which you could add something for as well.

         if (!idata->obcallback)
             ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, req,
                       "python_handler: no interpreter callback found.");

             return NULL;

When I get a chance I'll have a look at how "interpreters" gets set and 
what problems
could result. Wander if my Mac OS X patch screws this up in some cases.


More information about the Mod_python mailing list