aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2012-06-06 22:14:32 +0300
committerArnold D. Robbins <arnold@skeeve.com>2012-06-06 22:14:32 +0300
commit21a01e3ad4e2e77dccf73e8fd069370749880757 (patch)
treef3b17367552ef7831c2a67bfa27dc3193ae83356
parentdab3a678b3f65ae4cde21ca4b1d4fd24e8a71918 (diff)
downloadegawk-21a01e3ad4e2e77dccf73e8fd069370749880757.tar.gz
egawk-21a01e3ad4e2e77dccf73e8fd069370749880757.tar.bz2
egawk-21a01e3ad4e2e77dccf73e8fd069370749880757.zip
Hook in extension at_exit functions.
-rw-r--r--ChangeLog3
-rw-r--r--awk.h2
-rw-r--r--msg.c4
3 files changed, 9 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index f7e9ac9b..78ae5bb8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,6 +8,9 @@
* eval.c (set_LINT): Call update_ext_api() at the end.
* gawkapi.h: Document that do_XXX could change on the fly.
+ * awk.h (run_ext_exit_handlers): Add declaration.
+ * msg.c (gawk_exit): Call it.
+
2012-06-05 Arnold D. Robbins <arnold@skeeve.com>
* ext.c (load_ext): Remove use of RTLD_GLOBAL. Not needed in new
diff --git a/awk.h b/awk.h
index 280563c2..d8aa238b 100644
--- a/awk.h
+++ b/awk.h
@@ -707,10 +707,12 @@ struct break_point;
#if 1
#include "gawkapi.h"
+/* gawkapi.c: */
extern gawk_api_t api_impl;
extern void init_ext_api(void);
extern void update_ext_api(void);
extern NODE *awk_value_to_node(const awk_value_t *);
+extern void run_ext_exit_handlers(int exitval);
#endif
typedef struct exp_instruction {
diff --git a/msg.c b/msg.c
index c579b628..22cf5562 100644
--- a/msg.c
+++ b/msg.c
@@ -158,5 +158,9 @@ gawk_exit(int status)
exit_val = status;
longjmp(fatal_tag, 1);
}
+
+ /* run any extension exit handlers */
+ run_ext_exit_handlers(status);
+
exit(status);
}