Replace an overly optimistic assert() in _PyGC_CollectNoFail with a simple guard.
diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c
index 02e0cb8..a84d752 100644
--- a/Modules/gcmodule.c
+++ b/Modules/gcmodule.c
@@ -1612,12 +1612,19 @@
 {
     Py_ssize_t n;
 
-    /* This function should only be called on interpreter shutdown, and
-       therefore not recursively. */
-    assert(!collecting);
-    collecting = 1;
-    n = collect(NUM_GENERATIONS - 1, NULL, NULL, 1);
-    collecting = 0;
+    /* Ideally, this function is only called on interpreter shutdown,
+       and therefore not recursively.  Unfortunately, when there are daemon
+       threads, a daemon thread can start a cyclic garbage collection
+       during interpreter shutdown (and then never finish it).
+       See http://bugs.python.org/issue8713#msg195178 for an example.
+       */
+    if (collecting)
+        n = 0;
+    else {
+        collecting = 1;
+        n = collect(NUM_GENERATIONS - 1, NULL, NULL, 1);
+        collecting = 0;
+    }
     return n;
 }