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 Priority: Minor 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