[ http://issues.apache.org/jira/browse/MODPYTHON-69?page=all ]
     
Graham Dumpleton closed MODPYTHON-69:
-------------------------------------


> Potential deadlock in psp cache
> -------------------------------
>
>          Key: MODPYTHON-69
>          URL: http://issues.apache.org/jira/browse/MODPYTHON-69
>      Project: mod_python
>         Type: Bug
>   Components: publisher
>     Versions: 3.2.7
>  Environment: All
>     Reporter: Jim Gallacher
>      Fix For: 3.2.7

>
> This issue was discussed on the python-dev mailing list but not followed up 
> on. Fixing that now.
> In psp.py 
> def dbm_cache_store(srv, dbmfile, filename, mtime, val):
>     dbm_type = dbm_cache_type(dbmfile)
>     ### potential deadlock here! ###
>     _apache._global_lock(srv, "pspcache")
>     try:
>         dbm = dbm_type.open(dbmfile, 'c')
>         dbm[filename] = "%d %s" % (mtime, code2str(val))
>     finally:
>         try: dbm.close()
>         except: pass
>         _apache._global_unlock(srv, "pspcache")
> "pspcache" will hash to one of 31 mutexes. Therefore there is a 1 in 31 
> chance for a hash collision if a session is used in the same request, which 
> would result in a deadlock. (This has been confirmed by testing.)
> Most obvious solution is to use the global lock 0, which will serialize all 
> accesses to either pspcache.dbm. Global lock 0 is also used by DbmSession, 
> but since the lock is not held for the duration of the request there should 
> not be any additional deadlock issues.
> The fix is to replace the _apache._global_lock(srv, "pspcache") with
> _apache._global_lock(srv, None, 0)
> The corresponding lock handling in dbm_cache_get() will also need the same 
> fix.
> I will commit the this fix shortly.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to