[Zodb-checkins] SVN: ZODB/trunk/ Fixed bug 153316: address sizes on x86_64 Intel Xeon wouldn't match.

Christian Theune ct at gocept.com
Sun Nov 11 09:38:41 EST 2007


Log message for revision 81757:
  Fixed bug 153316: address sizes on x86_64 Intel Xeon wouldn't match.
  Used and backported Python 2.5 address structures.
  

Changed:
  U   ZODB/trunk/NEWS.txt
  U   ZODB/trunk/src/BTrees/BTreeItemsTemplate.c
  U   ZODB/trunk/src/BTrees/BTreeModuleTemplate.c
  U   ZODB/trunk/src/BTrees/BTreeTemplate.c
  U   ZODB/trunk/src/BTrees/BucketTemplate.c
  U   ZODB/trunk/src/BTrees/SetTemplate.c
  U   ZODB/trunk/src/BTrees/TreeSetTemplate.c
  A   ZODB/trunk/src/BTrees/py24compat.h
  U   ZODB/trunk/src/persistent/cPersistence.c
  U   ZODB/trunk/src/persistent/cPersistence.h
  U   ZODB/trunk/src/persistent/cPickleCache.c
  A   ZODB/trunk/src/persistent/py24compat.h

-=-
Modified: ZODB/trunk/NEWS.txt
===================================================================
--- ZODB/trunk/NEWS.txt	2007-11-11 14:31:53 UTC (rev 81756)
+++ ZODB/trunk/NEWS.txt	2007-11-11 14:38:41 UTC (rev 81757)
@@ -24,6 +24,10 @@
 - (unreleased, after 3.9.0a1) Added `offset` information to output of `fstail`
   script. Added test harness for this script.
 
+- (unreleased, after 3.9.0a1) Fixed bug 153316: persistent and BTrees were
+  using `int` for memory sizes which caused errors on x86_64 Intel Xeon
+  machines (using 64-bit Linux).
+
 ZEO
 ---
 

Modified: ZODB/trunk/src/BTrees/BTreeItemsTemplate.c
===================================================================
--- ZODB/trunk/src/BTrees/BTreeItemsTemplate.c	2007-11-11 14:31:53 UTC (rev 81756)
+++ ZODB/trunk/src/BTrees/BTreeItemsTemplate.c	2007-11-11 14:38:41 UTC (rev 81757)
@@ -69,10 +69,10 @@
   PyObject_DEL(self);
 }
 
-static int
+static Py_ssize_t
 BTreeItems_length_or_nonzero(BTreeItems *self, int nonzero)
 {
-    int r;
+    Py_ssize_t r;
     Bucket *b, *next;
 
     b = self->firstbucket;
@@ -111,8 +111,8 @@
     return r >= 0 ? r : 0;
 }
 
-static int
-BTreeItems_length( BTreeItems *self)
+static Py_ssize_t
+BTreeItems_length(BTreeItems *self)
 {
   return BTreeItems_length_or_nonzero(self, 0);
 }
@@ -132,7 +132,7 @@
 ** self->currentbucket.
 */
 static int
-BTreeItems_seek(BTreeItems *self, int i)
+BTreeItems_seek(BTreeItems *self, Py_ssize_t i)
 {
     int delta, pseudoindex, currentoffset;
     Bucket *b, *currentbucket;
@@ -285,7 +285,7 @@
 **		(ie pulls the ith item out)
 */
 static PyObject *
-BTreeItems_item(BTreeItems *self, int i)
+BTreeItems_item(BTreeItems *self, Py_ssize_t i)
 {
     PyObject *result;
 
@@ -311,13 +311,13 @@
 ** Returns:	BTreeItems item
 */
 static PyObject *
-BTreeItems_slice(BTreeItems *self, int ilow, int ihigh)
+BTreeItems_slice(BTreeItems *self, Py_ssize_t ilow, Py_ssize_t ihigh)
 {
   Bucket *lowbucket;
   Bucket *highbucket;
   int lowoffset;
   int highoffset;
-  int length = -1;  /* len(self), but computed only if needed */
+  Py_ssize_t length = -1;  /* len(self), but computed only if needed */
 
   /* Complications:
    * A Python slice never raises IndexError, but BTreeItems_seek does.
@@ -386,11 +386,11 @@
 }
 
 static PySequenceMethods BTreeItems_as_sequence = {
-  (inquiry) BTreeItems_length,
+  (lenfunc) BTreeItems_length,
   (binaryfunc)0,
-  (intargfunc)0,
-  (intargfunc) BTreeItems_item,
-  (intintargfunc) BTreeItems_slice,
+  (ssizeargfunc)0,
+  (ssizeargfunc) BTreeItems_item,
+  (ssizessizeargfunc) BTreeItems_slice,
 };
 
 /* Number Method items (just for nb_nonzero!) */

Modified: ZODB/trunk/src/BTrees/BTreeModuleTemplate.c
===================================================================
--- ZODB/trunk/src/BTrees/BTreeModuleTemplate.c	2007-11-11 14:31:53 UTC (rev 81756)
+++ ZODB/trunk/src/BTrees/BTreeModuleTemplate.c	2007-11-11 14:38:41 UTC (rev 81757)
@@ -27,6 +27,8 @@
 #define PER_ACCESSED(O) 1
 #endif
 
+#include "py24compat.h"
+
 /* So sue me.  This pair gets used all over the place, so much so that it
  * interferes with understanding non-persistence parts of algorithms.
  * PER_UNUSE can be used after a successul PER_USE or PER_USE_OR_RETURN.

Modified: ZODB/trunk/src/BTrees/BTreeTemplate.c
===================================================================
--- ZODB/trunk/src/BTrees/BTreeTemplate.c	2007-11-11 14:31:53 UTC (rev 81756)
+++ ZODB/trunk/src/BTrees/BTreeTemplate.c	2007-11-11 14:38:41 UTC (rev 81757)
@@ -1730,7 +1730,7 @@
 }
 
 /* forward declaration */
-static int
+static Py_ssize_t
 BTree_length_or_nonzero(BTree *self, int nonzero);
 
 static PyObject *
@@ -2062,7 +2062,7 @@
  *          -1  error
  *        >= 0  number of elements.
  */
-static int
+static Py_ssize_t
 BTree_length_or_nonzero(BTree *self, int nonzero)
 {
     int result;
@@ -2086,32 +2086,32 @@
     return result;
 }
 
-static int
-BTree_length( BTree *self)
+static Py_ssize_t
+BTree_length(BTree *self)
 {
   return BTree_length_or_nonzero(self, 0);
 }
 
 static PyMappingMethods BTree_as_mapping = {
-  (inquiry)BTree_length,		/*mp_length*/
+  (lenfunc)BTree_length,		/*mp_length*/
   (binaryfunc)BTree_get,		/*mp_subscript*/
   (objobjargproc)BTree_setitem,	        /*mp_ass_subscript*/
 };
 
 static PySequenceMethods BTree_as_sequence = {
-    (inquiry)0,                     /* sq_length */
+    (lenfunc)0,                     /* sq_length */
     (binaryfunc)0,                  /* sq_concat */
-    (intargfunc)0,                  /* sq_repeat */
-    (intargfunc)0,                  /* sq_item */
-    (intintargfunc)0,               /* sq_slice */
-    (intobjargproc)0,               /* sq_ass_item */
-    (intintobjargproc)0,            /* sq_ass_slice */
+    (ssizeargfunc)0,                /* sq_repeat */
+    (ssizeargfunc)0,                /* sq_item */
+    (ssizessizeargfunc)0,           /* sq_slice */
+    (ssizeobjargproc)0,             /* sq_ass_item */
+    (ssizessizeobjargproc)0,        /* sq_ass_slice */
     (objobjproc)BTree_contains,     /* sq_contains */
     0,                              /* sq_inplace_concat */
     0,                              /* sq_inplace_repeat */
 };
 
-static int
+static Py_ssize_t
 BTree_nonzero(BTree *self)
 {
   return BTree_length_or_nonzero(self, 1);

Modified: ZODB/trunk/src/BTrees/BucketTemplate.c
===================================================================
--- ZODB/trunk/src/BTrees/BucketTemplate.c	2007-11-11 14:31:53 UTC (rev 81756)
+++ ZODB/trunk/src/BTrees/BucketTemplate.c	2007-11-11 14:38:41 UTC (rev 81757)
@@ -1683,19 +1683,19 @@
 }
 
 static PyMappingMethods Bucket_as_mapping = {
-  (inquiry)Bucket_length,		/*mp_length*/
+  (lenfunc)Bucket_length,		/*mp_length*/
   (binaryfunc)bucket_getitem,		/*mp_subscript*/
   (objobjargproc)bucket_setitem,	/*mp_ass_subscript*/
 };
 
 static PySequenceMethods Bucket_as_sequence = {
-    (inquiry)0,                     /* sq_length */
+    (lenfunc)0,                     /* sq_length */
     (binaryfunc)0,                  /* sq_concat */
-    (intargfunc)0,                  /* sq_repeat */
-    (intargfunc)0,                  /* sq_item */
-    (intintargfunc)0,               /* sq_slice */
-    (intobjargproc)0,               /* sq_ass_item */
-    (intintobjargproc)0,            /* sq_ass_slice */
+    (ssizeargfunc)0,                /* sq_repeat */
+    (ssizeargfunc)0,                /* sq_item */
+    (ssizessizeargfunc)0,           /* sq_slice */
+    (ssizeobjargproc)0,             /* sq_ass_item */
+    (ssizessizeobjargproc)0,        /* sq_ass_slice */
     (objobjproc)bucket_contains,    /* sq_contains */
     0,                              /* sq_inplace_concat */
     0,                              /* sq_inplace_repeat */

Modified: ZODB/trunk/src/BTrees/SetTemplate.c
===================================================================
--- ZODB/trunk/src/BTrees/SetTemplate.c	2007-11-11 14:31:53 UTC (rev 81756)
+++ ZODB/trunk/src/BTrees/SetTemplate.c	2007-11-11 14:38:41 UTC (rev 81757)
@@ -243,7 +243,7 @@
   return NULL;
 }
 
-static int
+static Py_ssize_t
 set_length(Bucket *self)
 {
   int r;
@@ -256,7 +256,7 @@
 }
 
 static PyObject *
-set_item(Bucket *self, int index)
+set_item(Bucket *self, Py_ssize_t index)
 {
   PyObject *r=0;
 
@@ -274,16 +274,16 @@
 }
 
 static PySequenceMethods set_as_sequence = {
-	(inquiry)set_length,		/* sq_length */
-	(binaryfunc)0,                  /* sq_concat */
-	(intargfunc)0,                  /* sq_repeat */
-	(intargfunc)set_item,           /* sq_item */
-	(intintargfunc)0,               /* sq_slice */
-	(intobjargproc)0,               /* sq_ass_item */
-	(intintobjargproc)0,            /* sq_ass_slice */
-        (objobjproc)bucket_contains,    /* sq_contains */
-        0,                              /* sq_inplace_concat */
-        0,                              /* sq_inplace_repeat */
+  (lenfunc)set_length,            /* sq_length */
+  (binaryfunc)0,                  /* sq_concat */
+  (ssizeargfunc)0,                /* sq_repeat */
+  (ssizeargfunc)set_item,         /* sq_item */
+  (ssizessizeargfunc)0,           /* sq_slice */
+  (ssizeobjargproc)0,             /* sq_ass_item */
+  (ssizessizeobjargproc)0,        /* sq_ass_slice */
+  (objobjproc)bucket_contains,    /* sq_contains */
+  0,                              /* sq_inplace_concat */
+  0,                              /* sq_inplace_repeat */
 };
 
 static PyTypeObject SetType = {

Modified: ZODB/trunk/src/BTrees/TreeSetTemplate.c
===================================================================
--- ZODB/trunk/src/BTrees/TreeSetTemplate.c	2007-11-11 14:31:53 UTC (rev 81756)
+++ ZODB/trunk/src/BTrees/TreeSetTemplate.c	2007-11-11 14:38:41 UTC (rev 81757)
@@ -170,17 +170,17 @@
 };
 
 static PyMappingMethods TreeSet_as_mapping = {
-  (inquiry)BTree_length,		/*mp_length*/
+  (lenfunc)BTree_length,	/*mp_length*/
 };
 
 static PySequenceMethods TreeSet_as_sequence = {
-    (inquiry)0,                     /* sq_length */
+    (lenfunc)0,                     /* sq_length */
     (binaryfunc)0,                  /* sq_concat */
-    (intargfunc)0,                  /* sq_repeat */
-    (intargfunc)0,                  /* sq_item */
-    (intintargfunc)0,               /* sq_slice */
-    (intobjargproc)0,               /* sq_ass_item */
-    (intintobjargproc)0,            /* sq_ass_slice */
+    (ssizeargfunc)0,                /* sq_repeat */
+    (ssizeargfunc)0,                /* sq_item */
+    (ssizessizeargfunc)0,           /* sq_slice */
+    (ssizeobjargproc)0,             /* sq_ass_item */
+    (ssizessizeobjargproc)0,        /* sq_ass_slice */
     (objobjproc)BTree_contains,     /* sq_contains */
     0,                              /* sq_inplace_concat */
     0,                              /* sq_inplace_repeat */

Added: ZODB/trunk/src/BTrees/py24compat.h
===================================================================
--- ZODB/trunk/src/BTrees/py24compat.h	                        (rev 0)
+++ ZODB/trunk/src/BTrees/py24compat.h	2007-11-11 14:38:41 UTC (rev 81757)
@@ -0,0 +1,11 @@
+/* Backport type definitions from Python 2.5's object.h */
+#ifndef BTREE_PY24COMPATH_H
+#define BTREE_PY24COMPAT_H
+#if PY_VERSION_HEX < 0x02050000
+typedef Py_ssize_t (*lenfunc)(PyObject *);
+typedef PyObject *(*ssizeargfunc)(PyObject *, Py_ssize_t);
+typedef PyObject *(*ssizessizeargfunc)(PyObject *, Py_ssize_t, Py_ssize_t);
+typedef int(*ssizeobjargproc)(PyObject *, Py_ssize_t, PyObject *);
+typedef int(*ssizessizeobjargproc)(PyObject *, Py_ssize_t, Py_ssize_t, PyObject *);
+#endif /* PY_VERSION_HEX */
+#endif /* BTREE_PY24COMPAT_H */

Modified: ZODB/trunk/src/persistent/cPersistence.c
===================================================================
--- ZODB/trunk/src/persistent/cPersistence.c	2007-11-11 14:31:53 UTC (rev 81756)
+++ ZODB/trunk/src/persistent/cPersistence.c	2007-11-11 14:38:41 UTC (rev 81757)
@@ -300,7 +300,7 @@
 {
     PyObject *copy, *key, *value;
     char *ckey;
-    int pos = 0;
+    Py_ssize_t pos = 0;
 
     copy = PyDict_New();
     if (!copy)
@@ -414,7 +414,7 @@
 pickle_setattrs_from_dict(PyObject *self, PyObject *dict)
 {
     PyObject *key, *value;
-    int pos = 0;
+    Py_ssize_t pos = 0;
 
     if (!PyDict_Check(dict)) {
 	PyErr_SetString(PyExc_TypeError, "Expected dictionary");

Modified: ZODB/trunk/src/persistent/cPersistence.h
===================================================================
--- ZODB/trunk/src/persistent/cPersistence.h	2007-11-11 14:31:53 UTC (rev 81756)
+++ ZODB/trunk/src/persistent/cPersistence.h	2007-11-11 14:38:41 UTC (rev 81757)
@@ -16,6 +16,8 @@
 #define CPERSISTENCE_H
 
 #include "Python.h"
+#include "py24compat.h"
+
 #include "ring.h"
 
 #define CACHE_HEAD \

Modified: ZODB/trunk/src/persistent/cPickleCache.c
===================================================================
--- ZODB/trunk/src/persistent/cPickleCache.c	2007-11-11 14:31:53 UTC (rev 81756)
+++ ZODB/trunk/src/persistent/cPickleCache.c	2007-11-11 14:38:41 UTC (rev 81757)
@@ -378,7 +378,7 @@
 cc_invalidate(ccobject *self, PyObject *inv)
 {
   PyObject *key, *v;
-  int i = 0;
+  Py_ssize_t i = 0;
 
   if (PyDict_Check(inv))
     {
@@ -448,7 +448,7 @@
 cc_klass_items(ccobject *self)
 {
     PyObject *l,*k,*v;
-    int p = 0;
+    Py_ssize_t p = 0;
 
     l = PyList_New(0);
     if (l == NULL)
@@ -477,7 +477,7 @@
 cc_debug_info(ccobject *self)
 {
     PyObject *l,*k,*v;
-    int p = 0;
+    Py_ssize_t p = 0;
 
     l = PyList_New(0);
     if (l == NULL)
@@ -707,7 +707,7 @@
 static int
 cc_clear(ccobject *self)
 {
-    int pos = 0;
+    Py_ssize_t pos = 0;
     PyObject *k, *v;
     /* Clearing the cache is delicate.
 

Added: ZODB/trunk/src/persistent/py24compat.h
===================================================================
--- ZODB/trunk/src/persistent/py24compat.h	                        (rev 0)
+++ ZODB/trunk/src/persistent/py24compat.h	2007-11-11 14:38:41 UTC (rev 81757)
@@ -0,0 +1,9 @@
+/* Backport type definitions from Python 2.5's object.h */
+#ifndef PERSISTENT_PY24COMPATH_H
+#define PERSISTENT_PY24COMPAT_H
+#if PY_VERSION_HEX < 0x02050000
+typedef int Py_ssize_t;
+#define PY_SSIZE_T_MAX INT_MAX
+#define PY_SSIZE_T_MIN INT_MIN
+#endif /* PY_VERSION_HEX */
+#endif /* PERSISTENT_PY24COMPAT_H */



More information about the Zodb-checkins mailing list