|
David Fraser
davidf at sjsoft.com
Mon Apr 26 17:20:47 EST 2004
Stéphane Bidoul wrote:
>Hi,
>
>I'm having problems with server cleanup callbacks
>(on windows, with apache 2.0.49 and mod_python 3.1.3):
>
>For instance, with
>
>def endChild(data):
> f = file("test.log","a")
> try:
> print >> f, "endChild", data
> finally:
> f.close()
>
>firstTime = 1
>
>def handler(req):
> if firstTime:
> global firstTime
> req.server.register_cleanup(req,endChild,("endChild data",)
> firstTime = 0
>
>Sometimes, the endChild function runs normally,
>but sometimes, I get this in apache error.log:
>
>[notice] Child 1284: Exit event signaled. Child process is ending.
>[notice] Child 1284: Released the start mutex
>[notice] Child 1284: Waiting for 250 worker threads to exit.
>[notice] Child 1284: All worker threads have exited.
>[error] python_cleanup: Error calling cleanup object <function endChild at
>0x005FFC30>
>[error] exceptions.IOError: file() constructor not accessible in
>restricted mode
>[notice] Child 1284: Child process is exiting
>[notice] Parent: Child process exited successfully.
>
>Why is python thinking it is in restricted mode?
>I'm prepared to launch my debugger, but I've no clue
>where to search first, so any hint is most welcome.
>
>Thanks in advance.
>
>-sbi
>
>
Hi
I reported this on the python-dev list recently, and have quoted the
thread below.
Not much info seems to be available, but basically the code is being
called with a different interpreter to the one used to create some
objects or something like that.
I'd appreciate any further info you find out
David
> Just for reference, these are the URLs and info I've found on this
> problem.
> There doesn't seem to be much info at all in the Python docs /
> newsgroups.
> I have been trying to set up a testcase but at the moment it crashes
> Apache just trying to call a simple servercleanup (with pass) so I
> need to work at it a bit...
>
> http://4suite.org/docs/FAQ.xml
>
>> Why do I get codec or other strange errors when running under
>> mod_python?
>>
>> There is a known problem with mod_python in Python 2.2 and older.
>> mod_python is running in restricted mode, and this is considered by
>> the mod_python folks to be a bug. Anything which introspects (like
>> 4Suite) or does anything a restricted interpreter can't do will fail
>> with a cryptic exception. The solution is to upgrade to Python 2.3,
>> and use a recent build of mod_python (3.1 or newer).
>
>
> http://mail.python.org/pipermail/python-list/1999-April/000903.html
> (1999 discussion of this problem)
>
>> This alleviates the problem and makes it work. Outside of not
>> finalizing interpreters (which alleviates it somewhat, but makes the
>> code run in restricted mode since __builtins__ of the unpickled objects
>> isn't the same as the "current" __builtins__), I don't know of any other
>> way to fix this.
>>
> http://groups.google.com/groups?th=bfe053aba305ba1c&seekm=35A102B1.182B68A2%40starmedia.net#link1
>
> (1998 discussion of this problem)
>
>> In the course of playing with the pyapache, I've run into the situation
>> where the interpreter complains about being in restricted mode. What
>> I've been able to figure out is this: if the __builtins__ of the current
>> frame is different than the __builtins__ of the current top frame (read
>> as current thread), it is in restricted mode. Is this correct?
>
> http://groups.google.com/groups?th=fdeaf811901bc4f&seekm=mt2.0-17287-914742573%40news.informatik.uni-bonn.de
>
> (ancient announcement of httpady)
>
>> 1. A bug related to the way multiple intrpreters were implemented
>> that would
>> occasionally use objects created in one interpreter in another. The
>> bug would manifest
>> itself by Python complaining that __dict__ is not available in
>> restricted mode.
>>
>
>
>
> David Fraser wrote:
>
>> mod_python 3.1.3 running on Windows
>> Thanks for the explanation, that makes sense why I couldn't find the
>> code...
>> I'll try and compare the request and server implementations of
>> setting the cleanup function and work out why this is happening...
>>
>> David
>>
>> Gregory (Grisha) Trubetskoy wrote:
>>
>>> What version of mod_python is this?
>>>
>>> Restricted mode is a strange beast, in that there isn't really anything
>>> like a "restricted mode" flag, but it looks at a pointer somwhere
>>> (don't
>>> remember now), and if it's not what is expected, it concludes that
>>> it's in
>>> restricted mode. So this behaviour is actually a sign of a bug where an
>>> object is created in one subinterpreter but is running in another...
>>> These
>>> bugs can be hard to track down.
>>>
>>> Grisha
>>>
>>>
>>> On Tue, 6 Apr 2004, David Fraser wrote:
>>>
>>>
>>>
>>>> Hi
>>>>
>>>> It seems that server cleanup functions registered with
>>>> server.register_cleanup run in restricted mode.
>>>> I'm trying to use them to close a database connection and being run in
>>>> restricted mode causes problems.
>>>> I can't see in the code where this gets set, but I get the
>>>> following error:
>>>> [Tue Apr 06 17:16:01 2004] [error] python_cleanup: Error calling
>>>> cleanup
>>>> object <bound method jLogbookMultiServer.onshutdown of
>>>> <jLogbook.python.jlogbook.jLogbookMultiServer object at 0x00A62670>>
>>>> [Tue Apr 06 17:16:01 2004] [error] exceptions.RuntimeError:
>>>> instance.__dict__ not accessible in restricted mode
>>>>
>>>> Is there a reason that the server functions needed to be run in
>>>> restricted mode, or is there a better way I should do this?
>>>>
>>>> David
>>>
|