]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Consistently move the misses update to just before the user function call (GH-11715...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Thu, 31 Jan 2019 23:35:00 +0000 (15:35 -0800)
committerRaymond Hettinger <rhettinger@users.noreply.github.com>
Thu, 31 Jan 2019 23:35:00 +0000 (15:35 -0800)
Lib/functools.py
Modules/_functoolsmodule.c

index 592f156fe4262bd1eceaa8bcca2fd23eb2d44257..b734899b56de8a2379a0c1b47668049ba64b51f5 100644 (file)
@@ -500,10 +500,10 @@ def _lru_cache_wrapper(user_function, maxsize, typed, _CacheInfo):
     if maxsize == 0:
 
         def wrapper(*args, **kwds):
-            # No caching -- just a statistics update after a successful call
+            # No caching -- just a statistics update
             nonlocal misses
-            result = user_function(*args, **kwds)
             misses += 1
+            result = user_function(*args, **kwds)
             return result
 
     elif maxsize is None:
@@ -516,9 +516,9 @@ def _lru_cache_wrapper(user_function, maxsize, typed, _CacheInfo):
             if result is not sentinel:
                 hits += 1
                 return result
+            misses += 1
             result = user_function(*args, **kwds)
             cache[key] = result
-            misses += 1
             return result
 
     else:
index 4aca63e38c8b4197fc810f565d550264609b3cca..90c698ee41e49d5dc9ccfa9786517acf4b4c19ac 100644 (file)
@@ -796,10 +796,12 @@ lru_cache_make_key(PyObject *args, PyObject *kwds, int typed)
 static PyObject *
 uncached_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwds)
 {
-    PyObject *result = PyObject_Call(self->func, args, kwds);
+    PyObject *result;
+
+    self->misses++;
+    result = PyObject_Call(self->func, args, kwds);
     if (!result)
         return NULL;
-    self->misses++;
     return result;
 }
 
@@ -827,6 +829,7 @@ infinite_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwd
         Py_DECREF(key);
         return NULL;
     }
+    self->misses++;
     result = PyObject_Call(self->func, args, kwds);
     if (!result) {
         Py_DECREF(key);
@@ -838,7 +841,6 @@ infinite_lru_cache_wrapper(lru_cache_object *self, PyObject *args, PyObject *kwd
         return NULL;
     }
     Py_DECREF(key);
-    self->misses++;
     return result;
 }