summaryrefslogtreecommitdiffstats
path: root/Objects/bytesobject.c
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2014-08-17 19:12:18 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2014-08-17 19:12:18 (GMT)
commit88d146b7b9cece5c3e2e85feedce3417a589e8c3 (patch)
tree5c590cb9a6796df62a25087bf47abd1f15ce6373 /Objects/bytesobject.c
parentcfcde8ca400cf77cc83c03b83813f1c106a2947a (diff)
downloadcpython-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.c4
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);