]> granicus.if.org Git - python/commitdiff
bpo-29634: Reduce deque repeat execution when maxlen exist and size is not 1 (#255...
authorLouie Lu <louie.lu@hopebaytech.com>
Fri, 24 Feb 2017 03:59:49 +0000 (11:59 +0800)
committerRaymond Hettinger <rhettinger@users.noreply.github.com>
Fri, 24 Feb 2017 03:59:49 +0000 (22:59 -0500)
Modules/_collectionsmodule.c

index 8615bf1d390b1624a517fe353e56a41663f89700..44e9e119ae26e3f05b6750618f1d2af3675cb98f 100644 (file)
@@ -731,6 +731,10 @@ deque_inplace_repeat(dequeobject *deque, Py_ssize_t n)
     if (seq == NULL)
         return seq;
 
+    /* Reduce the number of repetitions when maxlen would be exceeded */
+    if (deque->maxlen >= 0 && n * size > deque->maxlen)
+        n = (deque->maxlen + size - 1) / size;
+
     for (i = 0 ; i < n-1 ; i++) {
         rv = deque_extend(deque, seq);
         if (rv == NULL) {