Commit 1d95978f authored by Christian Theune's avatar Christian Theune

Fixed bug 153316: address sizes on x86_64 Intel Xeon wouldn't match.

Used and backported Python 2.5 address structures.
parent f7b8b780
......@@ -24,6 +24,10 @@ General
- (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
---
......
......@@ -69,10 +69,10 @@ BTreeItems_dealloc(BTreeItems *self)
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 @@ BTreeItems_length_or_nonzero(BTreeItems *self, int nonzero)
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 @@ BTreeItems_length( BTreeItems *self)
** 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 @@ getBucketEntry(Bucket *b, int i, char kind)
** (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 @@ BTreeItems_item(BTreeItems *self, int i)
** 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 @@ BTreeItems_slice(BTreeItems *self, int ilow, int ihigh)
}
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!) */
......
......@@ -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.
......
......@@ -1730,7 +1730,7 @@ BTree_setdefault(BTree *self, PyObject *args)
}
/* forward declaration */
static int
static Py_ssize_t
BTree_length_or_nonzero(BTree *self, int nonzero);
static PyObject *
......@@ -2062,7 +2062,7 @@ BTree_tp_clear(BTree *self)
* -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 @@ BTree_length_or_nonzero(BTree *self, int nonzero)
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);
......
......@@ -1683,19 +1683,19 @@ Bucket_length( Bucket *self)
}
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 */
......
......@@ -243,7 +243,7 @@ err:
return NULL;
}
static int
static Py_ssize_t
set_length(Bucket *self)
{
int r;
......@@ -256,7 +256,7 @@ set_length(Bucket *self)
}
static PyObject *
set_item(Bucket *self, int index)
set_item(Bucket *self, Py_ssize_t index)
{
PyObject *r=0;
......@@ -274,13 +274,13 @@ set_item(Bucket *self, int index)
}
static PySequenceMethods set_as_sequence = {
(inquiry)set_length, /* sq_length */
(lenfunc)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 */
(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 */
......
......@@ -170,17 +170,17 @@ static struct PyMethodDef TreeSet_methods[] = {
};
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 */
......
/* 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 */
......@@ -300,7 +300,7 @@ pickle_copy_dict(PyObject *state)
{
PyObject *copy, *key, *value;
char *ckey;
int pos = 0;
Py_ssize_t pos = 0;
copy = PyDict_New();
if (!copy)
......@@ -414,7 +414,7 @@ static int
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");
......
......@@ -16,6 +16,8 @@
#define CPERSISTENCE_H
#include "Python.h"
#include "py24compat.h"
#include "ring.h"
#define CACHE_HEAD \
......
......@@ -378,7 +378,7 @@ static PyObject *
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 @@ static PyObject *
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 @@ static PyObject *
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 @@ cc_dealloc(ccobject *self)
static int
cc_clear(ccobject *self)
{
int pos = 0;
Py_ssize_t pos = 0;
PyObject *k, *v;
/* Clearing the cache is delicate.
......
/* 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 */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment