[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