|
Graham Dumpleton
grahamd at dscpl.com.au
Tue Mar 7 04:18:39 EST 2006
On 07/03/2006, at 8:00 PM, Manera, Villiam wrote:
> On windows work fine
>
> On linux: RH3 EL apache 2.0.55 mod_python: 3.2.8
>
> from mod_python import Session
>
> def fileses(req):
> #sess = Session.FileSession(req)
> sess = Session.DbmSession(req)
> # sess.unlock()
> return fileses1(req)
>
> def fileses1(req):
> #sess = Session.FileSession(req)
> sess = Session.DbmSession(req)
> return 'due'
>
> With DbmSession again work fine
> With FileSession and without sess.unlock() fileses1 hang
Without the unlock(), they both should probably hang.
The basic rule with sessions is that you should only create one per
request.
This is because the first will grab a lock on the session, creating a
second
will cause the thread to deadlock on itself as it waits for the first
session to
be unlocked.
You should use code like the following:
_get_session(req):
if not hasattr(req,"session"):
req.session = Session.DbmSession(req)
return req.session
def fileses(req):
sess = _get_session(req)
return fileses1(req)
def fileses1(req):
sess = _get_session(req)
return 'due'
Ie., cache the session object in the request and use cached one if it
already
exists.
Anyway, this will work in most cases, it actually needs to be more
complicated
than this to work with internal requests and other strange cases.
Graham
|