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


> mem_cleanup throws "dictionary changed size during iteration"
> -------------------------------------------------------------
>
>          Key: MODPYTHON-57
>          URL: http://issues.apache.org/jira/browse/MODPYTHON-57
>      Project: mod_python
>         Type: Bug
>   Components: core
>     Versions: 3.1.4
>  Environment: We are running under Windows, but the problem is likely not O/S 
> dependent.
>     Reporter: Shack Toms
>     Assignee: Nicolas Lehuen
>     Priority: Minor
>      Fix For: 3.2.7

>
> The mem_cleanup routine, in Session.py, appears to have a bug that causes
> python to throw "dictionary changed size during iteration".
> The current code is.
> def mem_cleanup(sdict):
>     for sid in sdict:
>         dict = sdict[sid]
>         if (time.time() - dict["_accessed"]) > dict["_timeout"]:
>             del sdict[sid]
> The for statement should be changed to
>     for sid in sdict.keys():
> This will first generate a list of the keys of the sdict, and will avoid the
> complaint about the dictionary changing on the "del sdict[sid]" statement.
> The dbm_cleanup code has another approach, to use one iteration to gather
> the keys to be deleted, and then have a second iteration over the gathered
> keys which does the del.   Using that approach, mem_cleanup should become...
> def mem_cleanup(sdict):
>     old = []
>     for sid in sdict:
>         dict = sdict[sid]
>         if (time.time() - dict["_accessed"]) > dict["_timeout"]:
>             old.append(sid)
>     for sid in old:
>         del sdict[sid]
> This is more efficient if the number of sessions is large compared to the
> number of sessions to be deleted.

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