Apache Mod-Python - Created: (MODPYTHON-57) mem_cleanup throws "dictionary changed size during iterat

This is Interesting: Free IT Magazines  
Home > Archive > Apache Mod-Python > May 2005 > Created: (MODPYTHON-57) mem_cleanup throws "dictionary changed size during iterat





You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

Author Created: (MODPYTHON-57) mem_cleanup throws "dictionary changed size during iterat
Shack Toms (JIRA)

2005-05-27, 5:46 pm

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.


Sponsored Links






Free braindumps | Software forum | Database administration forum

Copyright 2003 - 2008 webservertalk.com