va_end() all va_copy()ed va_lists.
diff --git a/Python/modsupport.c b/Python/modsupport.c
index bdaf8b2..aabee8f 100644
--- a/Python/modsupport.c
+++ b/Python/modsupport.c
@@ -467,8 +467,7 @@
     const char *f = format;
     int n = countformat(f, '\0');
     va_list lva;
-
-    va_copy(lva, va);
+    PyObject *retval;
 
     if (n < 0)
         return NULL;
@@ -476,9 +475,14 @@
         Py_INCREF(Py_None);
         return Py_None;
     }
-    if (n == 1)
-        return do_mkvalue(&f, &lva, flags);
-    return do_mktuple(&f, &lva, '\0', n, flags);
+    va_copy(lva, va);
+    if (n == 1) {
+        retval = do_mkvalue(&f, &lva, flags);
+    } else {
+        retval = do_mktuple(&f, &lva, '\0', n, flags);
+    }
+    va_end(lva);
+    return retval;
 }