[Zope-Checkins] CVS: Zope2 - BTreeItemsTemplate.c:1.6 BTreeModuleTemplate.c:1.7 BTreeTemplate.c:1.12 BucketTemplate.c:1.9 IIBTree.c:1.8 IOBTree.c:1.9 MergeTemplate.c:1.3 OIBTree.c:1.7 OOBTree.c:1.7 SetOpTemplate.c:1.5 SetTemplate.c:1.9 TreeSetTemplate.c:1.9 intkeymacros.h:1.4 intvaluemacros.h:1.5 objectkeymacros.h:1.2 objectvaluemacros.h:1.3

Jim Fulton jim@digicool.com
Tue, 20 Mar 2001 08:52:01 -0500 (EST)


Update of /cvs-repository/Zope2/lib/python/BTrees
In directory korak:/tmp/cvs-serv9833

Modified Files:
	BTreeItemsTemplate.c BTreeModuleTemplate.c BTreeTemplate.c 
	BucketTemplate.c IIBTree.c IOBTree.c MergeTemplate.c OIBTree.c 
	OOBTree.c SetOpTemplate.c SetTemplate.c TreeSetTemplate.c 
	intkeymacros.h intvaluemacros.h objectkeymacros.h 
	objectvaluemacros.h 
Log Message:
Added logic to updated the access time on BTree data structures as
they are used. This is important to keep used data structures in
memory when the ZODB garbage collector is busy.

Added Id strings.




--- Updated File BTreeItemsTemplate.c in package Zope2 --
--- BTreeItemsTemplate.c	2001/03/15 17:33:07	1.5
+++ BTreeItemsTemplate.c	2001/03/20 13:52:00	1.6
@@ -83,6 +83,8 @@
   
  ****************************************************************************/
 
+#define BTREEITEMSTEMPLATE_C "$Id$\n"
+
 typedef struct {
   PyObject_HEAD
   Bucket *firstbucket;			/* First bucket known		*/
@@ -141,11 +143,13 @@
 
       Py_INCREF(next);
       PER_ALLOW_DEACTIVATION(b);
+      PER_ACCESSED(b);
       Py_DECREF(b);
       b=next;
       PER_USE_OR_RETURN(b, -1);
     }
   PER_ALLOW_DEACTIVATION(b);
+  PER_ACCESSED(b);
   Py_DECREF(b);
 
   return r >= 0 ? r : 0;
@@ -255,6 +259,7 @@
                 if (b==NULL) goto no_match;
               
                 PER_ALLOW_DEACTIVATION(currentbucket);
+                PER_ACCESSED(currentbucket);
                 ASSIGNB(currentbucket, b);
                 UNLESS (PER_USE(currentbucket)) goto err;
 
@@ -294,6 +299,7 @@
                     pseudoindex += (currentbucket->len - currentoffset);
                     Py_INCREF(b);
                     PER_ALLOW_DEACTIVATION(currentbucket);
+                    PER_ACCESSED(currentbucket);
                     ASSIGNB(currentbucket, b);
                     UNLESS (PER_USE(currentbucket)) goto err;
                     currentoffset = 0;

--- Updated File BTreeModuleTemplate.c in package Zope2 --
--- BTreeModuleTemplate.c	2001/03/15 17:33:07	1.6
+++ BTreeModuleTemplate.c	2001/03/20 13:52:00	1.7
@@ -83,11 +83,6 @@
   
  ****************************************************************************/
 
-static char BTree_module_documentation[] = 
-""
-"\n$Id$"
-;
-
 #ifdef PERSISTENT
 #include "cPersistence.h"
 
@@ -101,8 +96,12 @@
  ? (((O)->state==cPersistent_UPTODATE_STATE) \
     ? ((O)->state=cPersistent_STICKY_STATE) : 1) : 0)
 
+#define PER_ACCESSED(O) ((O)->atime=((long)(time(NULL)/3))%65536) 
+
+
 #endif
 /***************************************************************/
+
 #else
 #include "ExtensionClass.h"
 #define PER_USE_OR_RETURN(self, NULL)
@@ -110,9 +109,11 @@
 #define PER_PREVENT_DEACTIVATION(self)
 #define PER_DEL(self)
 #define PER_USE(O) 1
+#define PER_ACCESSED(O) 1
 #define PER_CHANGED(O) 0
 #endif
 
+
 static PyObject *sort_str, *reverse_str, *items_str, *__setstate___str;
 
 static void PyVar_Assign(PyObject **v, PyObject *e) { Py_XDECREF(*v); *v=e;}
@@ -213,6 +214,7 @@
       if (first->next==current) 
         {
           PER_ALLOW_DEACTIVATION(first);
+          PER_ACCESSED(first);
           return first;
         }
       else if (first->next)
@@ -220,12 +222,14 @@
           Bucket *next = first->next;
           Py_INCREF(next);
           PER_ALLOW_DEACTIVATION(first);
+          PER_ACCESSED(first);
           Py_DECREF(first);
           first=next;
         }
       else
         {
           PER_ALLOW_DEACTIVATION(first);
+          PER_ACCESSED(first);
           Py_DECREF(first);
           IndexError(i);
           return NULL;
@@ -329,6 +333,22 @@
 #endif
   {NULL,		NULL}		/* sentinel */
 };
+
+static char BTree_module_documentation[] = 
+"\n"
+MASTER_ID
+BTREEITEMSTEMPLATE_C
+"$Id$\n"
+BTREETEMPLATE_C
+BUCKETTEMPLATE_C
+KEYMACROS_H
+MERGETEMPLATE_C
+SETOPTEMPLATE_C
+SETTEMPLATE_C
+TREESETTEMPLATE_C
+VALUEMACROS_H
+BTREEITEMSTEMPLATE_C
+;
 
 void 
 INITMODULE ()

--- Updated File BTreeTemplate.c in package Zope2 --
--- BTreeTemplate.c	2001/03/15 17:33:07	1.11
+++ BTreeTemplate.c	2001/03/20 13:52:00	1.12
@@ -83,6 +83,8 @@
   
  ****************************************************************************/
 
+#define BTREETEMPLATE_C "$Id$\n"
+
 /*
 ** _BTree_get
 **
@@ -132,6 +134,7 @@
     }
 
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   return r;
 }    
 
@@ -168,13 +171,15 @@
       next->firstbucket = BTREE(next->data->value)->firstbucket;
       Py_XINCREF(next->firstbucket);
       PER_ALLOW_DEACTIVATION(BTREE(next->data->value));
+      PER_ACCESSED(BTREE(next->data->value));
     }
   else
     {
       next->firstbucket = BUCKET(next->data->value);
       Py_XINCREF(next->firstbucket);
     }
-  
+
+  PER_CHANGED(self);
   return 0;
 }
 
@@ -360,7 +365,8 @@
   PER_USE_OR_RETURN(self, NULL);
   ASSIGN(o, OBJECT(BTree_lastBucket(self)));
   PER_ALLOW_DEACTIVATION(self);
-  
+  PER_ACCESSED(self);
+
   return BUCKET(o);
 }
 
@@ -373,7 +379,10 @@
 
   UNLESS (b=BTree_lastBucket(self)) goto err;
   if (Bucket_deleteNextBucket(b) < 0) goto err;
-  
+
+  PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
+
   return 0;
 
  err:
@@ -511,6 +520,7 @@
                                 BTREE(self->data->value)->firstbucket);
                         Py_XINCREF(self->firstbucket);
                         PER_ALLOW_DEACTIVATION(BTREE(self->data->value));
+                        PER_ACCESSED(BTREE(self->data->value));
                       }
                     else
                       {
@@ -544,10 +554,12 @@
           
   
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   return grew;
 
 err:
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   return -1;
 }
 
@@ -642,12 +654,14 @@
     }
 
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
 
   Py_INCREF(Py_None); 
   return Py_None;
 
 err:
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   return NULL;
 }
 
@@ -701,11 +715,13 @@
     }  
 
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
 
   return r;
 
 err:
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   return NULL;
 }
 
@@ -805,6 +821,7 @@
   PER_PREVENT_DEACTIVATION(self); 
   r=_BTree_setstate(self, args, 0);
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
 
   if (r < 0) return NULL;
   Py_INCREF(Py_None);
@@ -882,6 +899,7 @@
       PER_USE_OR_RETURN(self, -1);
       i = BTree_findRangeEnd(self, keyarg, low, bucket, offset);
       PER_ALLOW_DEACTIVATION(self);
+      PER_ACCESSED(self);
     }
   else
     {
@@ -916,6 +934,7 @@
           goto empty;
         } 
       PER_ALLOW_DEACTIVATION(self);
+      PER_ACCESSED(self);
       PER_USE_OR_RETURN(bucket, NULL);
     }
   else if (min)
@@ -923,6 +942,7 @@
       bucket = self->firstbucket;
       Py_INCREF(bucket);
       PER_ALLOW_DEACTIVATION(self);
+      PER_ACCESSED(self);
       PER_USE_OR_RETURN(bucket, NULL);
       offset = 0;
       if (offset >= bucket->len)
@@ -938,6 +958,7 @@
     {
       bucket = BTree_lastBucket(self);
       PER_ALLOW_DEACTIVATION(self);
+      PER_ACCESSED(self);
       PER_USE_OR_RETURN(bucket, NULL);
       if (bucket->len)
         offset = bucket->len - 1; 
@@ -953,6 +974,7 @@
   
   COPY_KEY_TO_OBJECT(key, bucket->keys[offset]);
   PER_ALLOW_DEACTIVATION(bucket);
+  PER_ACCESSED(bucket);
   Py_DECREF(bucket);
 
   return key;
@@ -962,9 +984,11 @@
 
  err:
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   if (bucket)  
     {
       PER_ALLOW_DEACTIVATION(bucket);
+      PER_ACCESSED(bucket);
       Py_DECREF(bucket);
     }
   return NULL;
@@ -1039,9 +1063,11 @@
       UNLESS (PER_USE(highbucket)) goto err;
       highoffset = highbucket->len - 1; 
       PER_ALLOW_DEACTIVATION(highbucket);      
+      PER_ACCESSED(highbucket);
     }
   
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   
   f=newBTreeItems(type, lowbucket, lowoffset, highbucket, highoffset);
   Py_DECREF(lowbucket);
@@ -1050,10 +1076,12 @@
   
  err:
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   return NULL;
 
  empty:
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   return newBTreeItems(type, 0, 0, 0, 0);
 }
 
@@ -1141,10 +1169,12 @@
   Py_DECREF(item);
 
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   return r;
 
  err:
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   Py_XDECREF(r);
   Py_XDECREF(it.set);
   Py_XDECREF(item);
@@ -1258,6 +1288,7 @@
   b = self->firstbucket;
   Py_XINCREF(b);
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
 
   while (b != NULL) 
     {
@@ -1267,12 +1298,14 @@
         {
           /* Short-circuit if all we care about is nonempty */
           PER_ALLOW_DEACTIVATION(b);
+          PER_ACCESSED(b);
           Py_DECREF(b);
           return 1;
         }
       n = b->next;
       Py_XINCREF(n);
       PER_ALLOW_DEACTIVATION(b);
+      PER_ACCESSED(b);
       ASSIGNB(b, n);
     }
 

--- Updated File BucketTemplate.c in package Zope2 --
--- BucketTemplate.c	2001/03/15 17:33:07	1.8
+++ BucketTemplate.c	2001/03/20 13:52:00	1.9
@@ -82,6 +82,8 @@
   
  ****************************************************************************/
 
+#define BUCKETTEMPLATE_C "$Id$\n"
+
 /*
 ** _bucket_get
 **
@@ -117,12 +119,14 @@
               COPY_VALUE_TO_OBJECT(r, self->values[i]);
 	    }
 	  PER_ALLOW_DEACTIVATION(self);
+          PER_ACCESSED(self);
 	  return r;
 	}
       else max=i;
     }
 
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   if (has_key) return PyInt_FromLong(0);
   PyErr_SetObject(PyExc_KeyError, keyarg);
   return NULL;
@@ -213,6 +217,7 @@
                   if (VALUE_SAME(self->values[i], value))
                     { /* short-circuit if no change */
                       PER_ALLOW_DEACTIVATION(self);
+                      PER_ACCESSED(self);
                       return 0;
                     }
 #endif
@@ -223,6 +228,7 @@
                   if (PER_CHANGED(self) < 0) goto err;
                 }
 	      PER_ALLOW_DEACTIVATION(self);
+              PER_ACCESSED(self);
 	      return 0;
 	    }
 	  else			/* There's no value so remove the item */
@@ -257,6 +263,7 @@
 
 	      if (PER_CHANGED(self) < 0) goto err;
 	      PER_ALLOW_DEACTIVATION(self);
+              PER_ACCESSED(self);
 	      return 1;
 	    }
 	}
@@ -297,10 +304,12 @@
 
   if (PER_CHANGED(self) < 0) goto err;
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   return 1;
 
 err:
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   return -1;
 }
 
@@ -420,6 +429,8 @@
   Py_INCREF(next);
   self->next = next;
 
+  PER_CHANGED(self);
+
   return 0;
 }
 
@@ -430,6 +441,7 @@
   *r=self->next;
   Py_XINCREF(*r);
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   return 0;
 }
 
@@ -445,9 +457,11 @@
       PER_CHANGED(self);
     }
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   return 0;
  err:
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   return -1;
 }
 /*
@@ -486,6 +500,7 @@
       else if (cmp == 0)
         {
           PER_ALLOW_DEACTIVATION(self);
+          PER_ACCESSED(self);
           *offset=i;
           return 1;
         } 
@@ -516,6 +531,7 @@
     }
 
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
 
   return i;
 }
@@ -546,6 +562,7 @@
 
   COPY_KEY_TO_OBJECT(key, self->keys[offset]);
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
 
   return key;
   
@@ -554,6 +571,7 @@
 
  err:
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   return NULL;
 }
 
@@ -638,10 +656,12 @@
     }
 
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   return r;
 
  err:
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   Py_XDECREF(r);
   return NULL;
 }
@@ -676,10 +696,12 @@
     }
 
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   return r;
 
  err:
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   Py_XDECREF(r);
   return NULL;
 }
@@ -724,10 +746,12 @@
     }
 
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   return r;
 
  err:
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   Py_XDECREF(r);
   Py_XDECREF(item);
   return NULL;
@@ -787,10 +811,12 @@
   Py_DECREF(item);
 
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   return r;
 
  err:
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   Py_XDECREF(r);
   Py_XDECREF(item);
   return NULL;
@@ -856,11 +882,13 @@
       if (PER_CHANGED(self) < 0) goto err;
     }
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   Py_INCREF(Py_None); 
   return Py_None;
 
 err:
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   return NULL;
 }
 
@@ -909,11 +937,13 @@
     ASSIGN(items, Py_BuildValue("(O)", items));
   
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
 
   return items;
 
 err:
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   Py_XDECREF(items);
   return NULL;
 }
@@ -981,6 +1011,7 @@
     }
 
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
 
   return 0;
 }
@@ -995,6 +1026,7 @@
   PER_PREVENT_DEACTIVATION(self); 
   r=_bucket_setstate(self, args);
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
 
   if (r < 0) return NULL;
   Py_INCREF(Py_None);
@@ -1160,6 +1192,7 @@
   PER_USE_OR_RETURN(self, -1);
   r=self->len;
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
   return r;
 }
 
@@ -1225,10 +1258,10 @@
 static int 
 nextBucket(SetIteration *i)
 {
-  UNLESS(PER_USE(BUCKET(i->set))) return -1;
-          
   if (i->position >= 0)
     {
+      UNLESS(PER_USE(BUCKET(i->set))) return -1;
+          
       if (i->position)
         {
           DECREF_KEY(i->key);
@@ -1244,10 +1277,14 @@
           i->position ++;
         }
       else
-        i->position = -1;
+        {
+          i->position = -1;
+          PER_ACCESSED(BUCKET(i->set));
+        }
+
+      PER_ALLOW_DEACTIVATION(BUCKET(i->set));
     }
 
-  PER_ALLOW_DEACTIVATION(BUCKET(i->set));
           
   return 0;
 }

--- Updated File IIBTree.c in package Zope2 --
--- IIBTree.c	2001/03/15 17:33:07	1.7
+++ IIBTree.c	2001/03/20 13:52:00	1.8
@@ -1,5 +1,7 @@
 /* Setup template macros */
 
+#define MASTER_ID "$Id$\n"
+
 #define PERSISTENT
 
 #define MOD_NAME_PREFIX "II"

--- Updated File IOBTree.c in package Zope2 --
--- IOBTree.c	2001/03/15 17:33:07	1.8
+++ IOBTree.c	2001/03/20 13:52:00	1.9
@@ -1,4 +1,6 @@
 
+#define MASTER_ID "$Id$\n"
+
 #define PERSISTENT
 
 #define MOD_NAME_PREFIX "IO"

--- Updated File MergeTemplate.c in package Zope2 --
--- MergeTemplate.c	2001/03/15 13:16:22	1.2
+++ MergeTemplate.c	2001/03/20 13:52:00	1.3
@@ -83,6 +83,8 @@
   
  ****************************************************************************/
 
+#define MERGETEMPLATE_C "$Id$\n"
+
 /****************************************************************************
  Set operations
  ****************************************************************************/

--- Updated File OIBTree.c in package Zope2 --
--- OIBTree.c	2001/03/15 17:33:07	1.6
+++ OIBTree.c	2001/03/20 13:52:00	1.7
@@ -1,4 +1,6 @@
 
+#define MASTER_ID "$Id$\n"
+
 #define PERSISTENT
 
 #define MOD_NAME_PREFIX "OI"

--- Updated File OOBTree.c in package Zope2 --
--- OOBTree.c	2001/03/15 17:33:07	1.6
+++ OOBTree.c	2001/03/20 13:52:00	1.7
@@ -1,4 +1,6 @@
 
+#define MASTER_ID "$Id$\n"
+
 #define PERSISTENT
 
 #define MOD_NAME_PREFIX "OO"

--- Updated File SetOpTemplate.c in package Zope2 --
--- SetOpTemplate.c	2001/03/15 13:16:22	1.4
+++ SetOpTemplate.c	2001/03/20 13:52:00	1.5
@@ -87,24 +87,30 @@
  Set operations
  ****************************************************************************/
 
+#define SETOPTEMPLATE_C "$Id$\n"
+
 #ifdef INTSET_H
 static int 
 nextIntSet(SetIteration *i)
-{
-  UNLESS(PER_USE(INTSET(i->set))) return -1;
-          
+{    
   if (i->position >= 0)
     {
+      UNLESS(PER_USE(INTSET(i->set))) return -1;
+
       if (i->position < INTSET(i->set)->len)
         {
           i->key = INTSET(i->set)->data[i->position];
           i->position ++;
         }
       else
-        i->position = -1;
+        {
+          i->position = -1;
+          PER_ACCESSED(INTSET(i->set));
+        }
+
+      PER_ALLOW_DEACTIVATION(INTSET(i->set));
     }
 
-  PER_ALLOW_DEACTIVATION(INTSET(i->set));
           
   return 0;
 }

--- Updated File SetTemplate.c in package Zope2 --
--- SetTemplate.c	2001/03/15 17:33:07	1.8
+++ SetTemplate.c	2001/03/20 13:52:00	1.9
@@ -83,6 +83,8 @@
   
  ****************************************************************************/
 
+#define SETTEMPLATE_C "$Id$\n"
+
 static PyObject *
 Set_insert(Bucket *self, PyObject *args)
 {
@@ -203,6 +205,7 @@
   PER_PREVENT_DEACTIVATION(self); 
   r=_set_setstate(self, args);
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
 
   if (r < 0) return NULL;
   Py_INCREF(Py_None);
@@ -271,6 +274,7 @@
   PER_USE_OR_RETURN(self, -1);
   r = self->len;
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
 
   return r;
 }
@@ -289,6 +293,7 @@
     IndexError(index);
 
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
 
   return r;
 }
@@ -339,10 +344,11 @@
 static int 
 nextSet(SetIteration *i)
 {
-  UNLESS(PER_USE(BUCKET(i->set))) return -1;
           
   if (i->position >= 0)
     {
+      UNLESS(PER_USE(BUCKET(i->set))) return -1;
+
       if (i->position)
         {
           DECREF_KEY(i->key);
@@ -355,10 +361,14 @@
           i->position ++;
         }
       else
-        i->position = -1;
+        {
+          i->position = -1;
+          PER_ACCESSED(BUCKET(i->set));
+        }
+
+      PER_ALLOW_DEACTIVATION(BUCKET(i->set));
     }
 
-  PER_ALLOW_DEACTIVATION(BUCKET(i->set));
           
   return 0;
 }

--- Updated File TreeSetTemplate.c in package Zope2 --
--- TreeSetTemplate.c	2001/03/17 00:47:30	1.8
+++ TreeSetTemplate.c	2001/03/20 13:52:00	1.9
@@ -83,6 +83,8 @@
   
  ****************************************************************************/
 
+#define TREESETTEMPLATE_C "$Id$\n"
+
 static PyObject *
 TreeSet_insert(BTree *self, PyObject *args)
 {
@@ -151,6 +153,7 @@
   PER_PREVENT_DEACTIVATION(self); 
   r=_BTree_setstate(self, args, 1);
   PER_ALLOW_DEACTIVATION(self);
+  PER_ACCESSED(self);
 
   if (r < 0) return NULL;
   Py_INCREF(Py_None);

--- Updated File intkeymacros.h in package Zope2 --
--- intkeymacros.h	2001/03/15 13:16:22	1.3
+++ intkeymacros.h	2001/03/20 13:52:00	1.4
@@ -1,3 +1,6 @@
+
+#define KEYMACROS_H "$Id$\n"
+
 #define KEY_TYPE int
 #define KEY_CHECK PyInt_Check
 #define TEST_KEY(K, T) (((K) < (T)) ? -1 : (((K) > (T)) ? 1: 0)) 

--- Updated File intvaluemacros.h in package Zope2 --
--- intvaluemacros.h	2001/03/15 13:16:22	1.4
+++ intvaluemacros.h	2001/03/20 13:52:00	1.5
@@ -1,3 +1,6 @@
+
+#define VALUEMACROS_H "$Id$\n"
+
 #define VALUE_TYPE int
 #define TEST_VALUE(K, T) (((K) < (T)) ? -1 : (((K) > (T)) ? 1: 0)) 
 #define VALUE_SAME(VALUE, TARGET) ( (VALUE) == (TARGET) )

--- Updated File objectkeymacros.h in package Zope2 --
--- objectkeymacros.h	2001/02/01 22:34:58	1.1
+++ objectkeymacros.h	2001/03/20 13:52:00	1.2
@@ -1,3 +1,4 @@
+#define KEYMACROS_H "$Id$\n"
 #define KEY_TYPE PyObject *
 #define TEST_KEY(KEY, TARGET) PyObject_Compare((KEY),(TARGET))
 #define INCREF_KEY(k) Py_INCREF(k)

--- Updated File objectvaluemacros.h in package Zope2 --
--- objectvaluemacros.h	2001/02/19 00:07:04	1.2
+++ objectvaluemacros.h	2001/03/20 13:52:00	1.3
@@ -1,3 +1,6 @@
+
+#define VALUEMACROS_H "$Id$\n"
+
 #define VALUE_TYPE PyObject *
 #define TEST_VALUE(VALUE, TARGET) PyObject_Compare((VALUE),(TARGET))
 #define DECLARE_VALUE(NAME) VALUE_TYPE NAME