cpython: Remove explicit empty tuple reuse in cpickle.
http://hg.python.org/cpython/rev/b44dbf07732e changeset: 87631:b44dbf07732e user: Alexandre Vassalotti <alexandre@peadrop.com> date: Thu Nov 28 15:17:29 2013 -0800 summary: 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. files: Modules/_pickle.c | 18 ++++++------------ 1 files changed, 6 insertions(+), 12 deletions(-) diff --git a/Modules/_pickle.c b/Modules/_pickle.c --- a/Modules/_pickle.c +++ b/Modules/_pickle.c @@ -166,9 +166,6 @@ /* 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 @@ 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 @@ } Py_CLEAR(codecs); - st->empty_tuple = PyTuple_New(0); - if (st->empty_tuple == NULL) - goto error; - return 0; error: @@ -1137,8 +1129,9 @@ 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 @@ /* 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 @@ Py_VISIT(st->name_mapping_3to2); Py_VISIT(st->import_mapping_3to2); Py_VISIT(st->codecs_encode); - Py_VISIT(st->empty_tuple); return 0; } -- Repository URL: http://hg.python.org/cpython
participants (1)
-
alexandre.vassalotti