summaryrefslogtreecommitdiff
path: root/Python/pythonrun.c
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1994-09-07 14:38:28 +0000
committerGuido van Rossum <guido@python.org>1994-09-07 14:38:28 +0000
commit1662dd5a3d5301a54f15f861a5d24c179bf67bca (patch)
tree8e066a47a238ff1486e8e5bd6e6fcfe957b1ba02 /Python/pythonrun.c
parent9776adf56561fa492f6261e1710ac2ac0e7fdc08 (diff)
downloadcpython-git-1662dd5a3d5301a54f15f861a5d24c179bf67bca.tar.gz
added Py_AtExit() -- register cleanup functions for C modules
Diffstat (limited to 'Python/pythonrun.c')
-rw-r--r--Python/pythonrun.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 59fa7cad2e..8387eed027 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -466,6 +466,19 @@ fatal(msg)
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 @@ cleanup()
}
flushline();
+
+ while (nexitfuncs > 0)
+ (*exitfuncs[--nexitfuncs])();
}
#ifdef COUNT_ALLOCS