added Py_AtExit() -- register cleanup functions for C modules
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 59fa7ca..8387eed 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -466,6 +466,19 @@
 int threads_started = 0; /* Set by threadmodule.c and maybe others */
 #endif
 
+#define NEXITFUNCS 32
+static void (*exitfuncs[NEXITFUNCS])();
+static int nexitfuncs = 0;
+
+int Py_AtExit(func)
+	void (*func) PROTO((void));
+{
+	if (nexitfuncs >= NEXITFUNCS)
+		return -1;
+	exitfuncs[nexitfuncs++] = func;
+	return 0;
+}
+
 void
 cleanup()
 {
@@ -489,6 +502,9 @@
 	}
 
 	flushline();
+
+	while (nexitfuncs > 0)
+		(*exitfuncs[--nexitfuncs])();
 }
 
 #ifdef COUNT_ALLOCS