Issue #9828: Destroy the GIL in Py_Finalize(), so that it gets properly
re-created on a subsequent call to Py_Initialize().  The problem (a crash)
wouldn't appear in 3.1 or 2.7 where the GIL's structure is more trivial.
diff --git a/Python/ceval.c b/Python/ceval.c
index a181ca8..48b5678 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -313,6 +313,15 @@
 }
 
 void
+_PyEval_FiniThreads(void)
+{
+    if (!gil_created())
+        return;
+    destroy_gil();
+    assert(!gil_created());
+}
+
+void
 PyEval_AcquireLock(void)
 {
     PyThreadState *tstate = PyThreadState_GET();
@@ -368,10 +377,6 @@
 
     if (!gil_created())
         return;
-    /*XXX Can't use PyThread_free_lock here because it does too
-      much error-checking.  Doing this cleanly would require
-      adding a new function to each thread_*.h.  Instead, just
-      create a new lock and waste a little bit of memory */
     recreate_gil();
     pending_lock = PyThread_allocate_lock();
     take_gil(tstate);