Index: lib/Components/BTree/BTree.c =================================================================== RCS file: /home/cvs/development/external/Zope2/lib/Components/BTree/BTree.c,v retrieving revision 1.2 retrieving revision 1.2.2.1 diff -c -4 -r1.2 -r1.2.2.1 *** lib/Components/BTree/BTree.c 9 Jan 2002 14:25:28 -0000 1.2 --- lib/Components/BTree/BTree.c 25 Jan 2002 15:05:48 -0000 1.2.2.1 *************** *** 1176,1184 **** DECREF_VALUE(self->data[i].value); } if(HasInstDict(self) && (dict=INSTANCE_DICT(self))) PyDict_Clear(dict); self->len=0; ! self->state=cPersistent_GHOST_STATE; } Py_INCREF(Py_None); return Py_None; --- 1176,1184 ---- DECREF_VALUE(self->data[i].value); } if(HasInstDict(self) && (dict=INSTANCE_DICT(self))) PyDict_Clear(dict); self->len=0; ! PER_GHOSTIFY(self); } Py_INCREF(Py_None); return Py_None; *************** *** 1234,1242 **** PyObject *dict; if(_BTree_clear(self) < 0) return NULL; if(HasInstDict(self) && (dict=INSTANCE_DICT(self))) PyDict_Clear(dict); ! self->state=cPersistent_GHOST_STATE; } Py_INCREF(Py_None); return Py_None; --- 1234,1242 ---- PyObject *dict; if(_BTree_clear(self) < 0) return NULL; if(HasInstDict(self) && (dict=INSTANCE_DICT(self))) PyDict_Clear(dict); ! PER_GHOSTIFY(self); } Py_INCREF(Py_None); return Py_None; Index: lib/Components/BTree/intSet.c =================================================================== RCS file: /home/cvs/development/external/Zope2/lib/Components/BTree/intSet.c,v retrieving revision 1.2 retrieving revision 1.2.2.1 diff -c -4 -r1.2 -r1.2.2.1 *** lib/Components/BTree/intSet.c 9 Jan 2002 14:25:29 -0000 1.2 --- lib/Components/BTree/intSet.c 25 Jan 2002 15:05:48 -0000 1.2.2.1 *************** *** 439,447 **** if(self->state==cPersistent_UPTODATE_STATE && HasInstDict(self) && (dict=INSTANCE_DICT(self))) { PyDict_Clear(dict); ! self->state=cPersistent_GHOST_STATE; } Py_INCREF(Py_None); return Py_None; --- 439,447 ---- if(self->state==cPersistent_UPTODATE_STATE && HasInstDict(self) && (dict=INSTANCE_DICT(self))) { PyDict_Clear(dict); ! PER_GHOSTIFY(self); } Py_INCREF(Py_None); return Py_None; Index: lib/Components/ExtensionClass/src/Record.c =================================================================== RCS file: /home/cvs/development/external/Zope2/lib/Components/ExtensionClass/src/Record.c,v retrieving revision 1.2 retrieving revision 1.2.2.1 diff -c -4 -r1.2 -r1.2.2.1 *** lib/Components/ExtensionClass/src/Record.c 9 Jan 2002 14:25:29 -0000 1.2 --- lib/Components/ExtensionClass/src/Record.c 25 Jan 2002 15:05:48 -0000 1.2.2.1 *************** *** 220,228 **** { Record_deal(self); self->schema=NULL; self->data=NULL; ! self->state=cPersistent_GHOST_STATE; Py_INCREF(Py_None); return Py_None; } #endif --- 220,228 ---- { Record_deal(self); self->schema=NULL; self->data=NULL; ! PER_GHOSTIFY(self); Py_INCREF(Py_None); return Py_None; } #endif Index: lib/python/BTrees/BTreeTemplate.c =================================================================== RCS file: /home/cvs/development/external/Zope2/lib/python/BTrees/BTreeTemplate.c,v retrieving revision 1.1.1.2 retrieving revision 1.1.1.2.8.1 diff -c -4 -r1.1.1.2 -r1.1.1.2.8.1 *** lib/python/BTrees/BTreeTemplate.c 10 Sep 2001 14:55:08 -0000 1.1.1.2 --- lib/python/BTrees/BTreeTemplate.c 25 Jan 2002 15:05:48 -0000 1.1.1.2.8.1 *************** *** 643,651 **** { if (self->state==cPersistent_UPTODATE_STATE && self->jar) { if (_BTree_clear(self) < 0) return NULL; ! self->state=cPersistent_GHOST_STATE; } Py_INCREF(Py_None); return Py_None; --- 643,651 ---- { if (self->state==cPersistent_UPTODATE_STATE && self->jar) { if (_BTree_clear(self) < 0) return NULL; ! PER_GHOSTIFY(self); } Py_INCREF(Py_None); return Py_None; Index: lib/python/BTrees/BucketTemplate.c =================================================================== RCS file: /home/cvs/development/external/Zope2/lib/python/BTrees/BucketTemplate.c,v retrieving revision 1.1.1.2 retrieving revision 1.1.1.2.8.1 diff -c -4 -r1.1.1.2 -r1.1.1.2.8.1 *** lib/python/BTrees/BucketTemplate.c 10 Sep 2001 14:55:08 -0000 1.1.1.2 --- lib/python/BTrees/BucketTemplate.c 25 Jan 2002 15:05:48 -0000 1.1.1.2.8.1 *************** *** 859,867 **** { if (self->state==cPersistent_UPTODATE_STATE && self->jar) { if (_bucket_clear(self) < 0) return NULL; ! self->state=cPersistent_GHOST_STATE; } Py_INCREF(Py_None); return Py_None; --- 859,867 ---- { if (self->state==cPersistent_UPTODATE_STATE && self->jar) { if (_bucket_clear(self) < 0) return NULL; ! PER_GHOSTIFY(self); } Py_INCREF(Py_None); return Py_None; Index: lib/python/ZODB/Connection.py =================================================================== RCS file: /home/cvs/development/external/Zope2/lib/python/ZODB/Connection.py,v retrieving revision 1.7 retrieving revision 1.7.8.7 diff -c -4 -r1.7 -r1.7.8.7 *** lib/python/ZODB/Connection.py 10 Sep 2001 15:32:28 -0000 1.7 --- lib/python/ZODB/Connection.py 28 Jan 2002 11:44:45 -0000 1.7.8.7 *************** *** 136,149 **** --- 136,165 ---- cache_deactivate_after=60): """Create a new Connection""" self._version=version self._cache=cache=PickleCache(self, cache_size, cache_deactivate_after) + if version: + # Caches for versions end up empty if the version + # is not used for a while. Non-version caches + # keep their content indefinitely. + self._cache.cache_drain_resistance = 100 self._incrgc=self.cacheGC=cache.incrgc self._invalidated=d={} self._invalid=d.has_key self._committed=[] self._code_timestamp = global_code_timestamp + def _cache_items(self): + # find all items on the lru list + items = self._cache.lru_items() + # fine everything. some on the lru list, some not + everything = self._cache.cache_data + # remove those items that are on the lru list + for k,v in items: + del everything[k] + # return a list of [ghosts....not recently used.....recently used] + return everything.items() + items + def __repr__(self): if self._version: ver = ' (in version %s)' % `self._version` else: *************** *** 492,502 **** cache_get=cache.get for oid in creating: o=cache_get(oid, None) if o is not None: del o._p_jar del o._p_oid - del cache[oid] #XXX def db(self): return self._db --- 508,518 ---- cache_get=cache.get for oid in creating: o=cache_get(oid, None) if o is not None: + del cache[oid] del o._p_jar del o._p_oid #XXX def db(self): return self._db Index: lib/python/ZODB/DB.py =================================================================== RCS file: /home/cvs/development/external/Zope2/lib/python/ZODB/DB.py,v retrieving revision 1.4 retrieving revision 1.4.2.1 diff -c -4 -r1.4 -r1.4.2.1 *** lib/python/ZODB/DB.py 25 Jan 2002 14:50:29 -0000 1.4 --- lib/python/ZODB/DB.py 25 Jan 2002 17:24:51 -0000 1.4.2.1 *************** *** 240,248 **** conn_no = [0] # A mutable reference to a counter def f(con, detail=detail, rc=sys.getrefcount, conn_no=conn_no): conn_no[0] = conn_no[0] + 1 cn = conn_no[0] ! for oid, ob in con._cache.items(): id='' if hasattr(ob,'__dict__'): d=ob.__dict__ if d.has_key('id'): --- 240,248 ---- conn_no = [0] # A mutable reference to a counter def f(con, detail=detail, rc=sys.getrefcount, conn_no=conn_no): conn_no[0] = conn_no[0] + 1 cn = conn_no[0] ! for oid, ob in con._cache_items(): id='' if hasattr(ob,'__dict__'): d=ob.__dict__ if d.has_key('id'):