summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorAlexandre Vassalotti <alexandre@peadrop.com>2013-11-28 23:17:29 (GMT)
committerAlexandre Vassalotti <alexandre@peadrop.com>2013-11-28 23:17:29 (GMT)
commit6bf41e54a42fbe3deee70b8d786096bd6d1d133d (patch)
tree83ffa377600c2d0e71b54d68d7d5fee71b29c534 /Modules
parentb13e6bcbd851c61af22c44dbe6f156653f54baae (diff)
downloadcpython-6bf41e54a42fbe3deee70b8d786096bd6d1d133d.zip
cpython-6bf41e54a42fbe3deee70b8d786096bd6d1d133d.tar.gz
cpython-6bf41e54a42fbe3deee70b8d786096bd6d1d133d.tar.bz2
Remove explicit empty tuple reuse in cpickle.
PyTuple_New(0) always returns the same empty tuple from its free list anyway, so we are not saving much here. Plus, the code where this was used is on uncommon run paths.
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_pickle.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/Modules/_pickle.c b/Modules/_pickle.c
index bb10118..399ad47 100644
--- a/Modules/_pickle.c
+++ b/Modules/_pickle.c
@@ -166,9 +166,6 @@ typedef struct {
/* codecs.encode, used for saving bytes in older protocols */
PyObject *codecs_encode;
-
- /* As the name says, an empty tuple. */
- PyObject *empty_tuple;
} PickleState;
/* Forward declaration of the _pickle module definition. */
@@ -205,7 +202,6 @@ _Pickle_ClearState(PickleState *st)
Py_CLEAR(st->name_mapping_3to2);
Py_CLEAR(st->import_mapping_3to2);
Py_CLEAR(st->codecs_encode);
- Py_CLEAR(st->empty_tuple);
}
/* Initialize the given pickle module state. */
@@ -321,10 +317,6 @@ _Pickle_InitState(PickleState *st)
}
Py_CLEAR(codecs);
- st->empty_tuple = PyTuple_New(0);
- if (st->empty_tuple == NULL)
- goto error;
-
return 0;
error:
@@ -1137,8 +1129,9 @@ _Unpickler_ReadFromFile(UnpicklerObject *self, Py_ssize_t n)
return -1;
if (n == READ_WHOLE_LINE) {
- PickleState *st = _Pickle_GetGlobalState();
- data = PyObject_Call(self->readline, st->empty_tuple, NULL);
+ PyObject *empty_tuple = PyTuple_New(0);
+ data = PyObject_Call(self->readline, empty_tuple, NULL);
+ Py_DECREF(empty_tuple);
}
else {
PyObject *len = PyLong_FromSsize_t(n);
@@ -3774,8 +3767,10 @@ save(PicklerObject *self, PyObject *obj, int pers_save)
/* Check for a __reduce__ method. */
reduce_func = _PyObject_GetAttrId(obj, &PyId___reduce__);
if (reduce_func != NULL) {
- reduce_value = PyObject_Call(reduce_func, st->empty_tuple,
+ PyObject *empty_tuple = PyTuple_New(0);
+ reduce_value = PyObject_Call(reduce_func, empty_tuple,
NULL);
+ Py_DECREF(empty_tuple);
}
else {
PyErr_Format(st->PicklingError,
@@ -7412,7 +7407,6 @@ pickle_traverse(PyObject *m, visitproc visit, void *arg)
Py_VISIT(st->name_mapping_3to2);
Py_VISIT(st->import_mapping_3to2);
Py_VISIT(st->codecs_encode);
- Py_VISIT(st->empty_tuple);
return 0;
}