- New C API PyGC_Collect(), same as calling gc.collect().
- Call this in Py_Finalize().
- Expand the Misc/NEWS text on PY_LONG_LONG.
diff --git a/Include/objimpl.h b/Include/objimpl.h
index 2b35e67..3679cba 100644
--- a/Include/objimpl.h
+++ b/Include/objimpl.h
@@ -228,6 +228,9 @@
  * ==========================
  */
 
+/* C equivalent of gc.collect(). */
+long PyGC_Collect(void);
+
 /* Test if a type has a GC head */
 #define PyType_IS_GC(t) PyType_HasFeature((t), Py_TPFLAGS_HAVE_GC)
 
diff --git a/Misc/NEWS b/Misc/NEWS
index 0c96ac9..7efea39 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -169,11 +169,17 @@
 C API
 -----
 
+- Added PyGC_Collect(), equivalent to calling gc.collect().
+
 - PyThreadState_GetDict() was changed not to raise an exception or
   issue a fatal error when no current thread state is available.  This
   makes it possible to print dictionaries when no thread is active.
 
-- LONG_LONG was renamed to PY_LONG_LONG.
+- LONG_LONG was renamed to PY_LONG_LONG.  Extensions that use this and
+  need compatibility with previous versions can use this:
+    #ifndef  PY_LONG_LONG
+    #define  PY_LONG_LONG  LONG_LONG
+    #endif
 
 - Added PyObject_SelfIter() to fill the tp_iter slot for the
   typical case where the method returns its self argument.
diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c
index 4fd4027..bb40b8f 100644
--- a/Modules/gcmodule.c
+++ b/Modules/gcmodule.c
@@ -980,8 +980,26 @@
 #undef ADD_INT
 }
 
+/* API to invoke gc.collect() from C */
+long
+PyGC_Collect(void)
+{
+	long n;
+
+	if (collecting)
+		n = 0; /* already collecting, don't do anything */
+	else {
+		collecting = 1;
+		n = collect(NUM_GENERATIONS - 1);
+		collecting = 0;
+	}
+
+	return n;
+}
+
 /* for debugging */
-void _PyGC_Dump(PyGC_Head *g)
+void
+_PyGC_Dump(PyGC_Head *g)
 {
 	_PyObject_Dump(FROM_GC(g));
 }
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index a84186c..4cfb664 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -255,9 +255,17 @@
 	Py_XDECREF(PyModule_WarningsModule);
 	PyModule_WarningsModule = NULL;
 
+	/* Collect garbage.  This may call finalizers; it's nice to call these
+	   before all modules are destroyed. */
+	PyGC_Collect();
+
 	/* Destroy all modules */
 	PyImport_Cleanup();
 
+	/* Collect final garbage.  This disposes of cycles created by
+	   new-style class definitions, for example. */
+	PyGC_Collect();
+
 	/* Destroy the database used by _PyImport_{Fixup,Find}Extension */
 	_PyImport_Fini();