From 21a01e3ad4e2e77dccf73e8fd069370749880757 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Wed, 6 Jun 2012 22:14:32 +0300 Subject: Hook in extension at_exit functions. --- ChangeLog | 3 +++ awk.h | 2 ++ msg.c | 4 ++++ 3 files changed, 9 insertions(+) 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 * 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); } -- cgit v1.2.3