diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2014-08-17 19:12:18 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2014-08-17 19:12:18 (GMT) |
commit | 88d146b7b9cece5c3e2e85feedce3417a589e8c3 (patch) | |
tree | 5c590cb9a6796df62a25087bf47abd1f15ce6373 /Objects/bytesobject.c | |
parent | cfcde8ca400cf77cc83c03b83813f1c106a2947a (diff) | |
download | cpython-88d146b7b9cece5c3e2e85feedce3417a589e8c3.zip cpython-88d146b7b9cece5c3e2e85feedce3417a589e8c3.tar.gz cpython-88d146b7b9cece5c3e2e85feedce3417a589e8c3.tar.bz2 |
Optimize PyBytes_FromObject(): only overallocate when size=0 to not get the
empty string singleton
Diffstat (limited to 'Objects/bytesobject.c')
-rw-r--r-- | Objects/bytesobject.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c index ca565eb..c5af253 100644 --- a/Objects/bytesobject.c +++ b/Objects/bytesobject.c @@ -3174,10 +3174,12 @@ PyBytes_FromObject(PyObject *x) returning a shared empty bytes string. This required because we want to call _PyBytes_Resize() the returned object, which we can only do on bytes objects with refcount == 1. */ - size += 1; + if (size == 0) + size = 1; new = PyBytes_FromStringAndSize(NULL, size); if (new == NULL) return NULL; + assert(Py_REFCNT(new) == 1); /* Get the iterator */ it = PyObject_GetIter(x); |