Handle a possible race condition
diff --git a/Lib/functools.py b/Lib/functools.py
index e4458f4..8206c4a 100644
--- a/Lib/functools.py
+++ b/Lib/functools.py
@@ -241,6 +241,12 @@
                         return result
                 result = user_function(*args, **kwds)
                 with lock:
+                    if key in cache:
+                        # getting here means that this same key was added to the
+                        # cache while the lock was released.  since the link
+                        # update is already done, we need only return the
+                        # computed result and update the count of misses.
+                        pass
                     if currsize < maxsize:
                         # put result in a new link at the front of the queue
                         last = root[PREV]