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