aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main.c1
-rw-r--r--src/qreg.c4
-rw-r--r--src/qreg.h1
-rw-r--r--tests/testsuite.at4
4 files changed, 7 insertions, 3 deletions
diff --git a/src/main.c b/src/main.c
index 38b1197..797ef73 100644
--- a/src/main.c
+++ b/src/main.c
@@ -457,6 +457,7 @@ cleanup:
teco_ring_cleanup();
teco_qreg_table_clear(&local_qregs);
teco_qreg_table_clear(&teco_qreg_table_globals);
+ teco_qreg_stack_clear();
teco_view_free(teco_qreg_view);
#endif
teco_interface_cleanup();
diff --git a/src/qreg.c b/src/qreg.c
index 5c39409..84bc217 100644
--- a/src/qreg.c
+++ b/src/qreg.c
@@ -1140,14 +1140,12 @@ teco_qreg_stack_pop(teco_qreg_t *qreg, GError **error)
return TRUE;
}
-#ifndef NDEBUG
-static void __attribute__((destructor))
+void
teco_qreg_stack_clear(void)
{
g_array_set_clear_func(teco_qreg_stack, (GDestroyNotify)teco_qreg_stack_entry_clear);
g_array_free(teco_qreg_stack, TRUE);
}
-#endif
gboolean
teco_ed_hook(teco_ed_hook_t type, GError **error)
diff --git a/src/qreg.h b/src/qreg.h
index 4797a01..6199b31 100644
--- a/src/qreg.h
+++ b/src/qreg.h
@@ -179,6 +179,7 @@ extern teco_qreg_table_t teco_qreg_table_globals;
gboolean teco_qreg_stack_push(teco_qreg_t *qreg, GError **error);
gboolean teco_qreg_stack_pop(teco_qreg_t *qreg, GError **error);
+void teco_qreg_stack_clear(void);
typedef enum {
TECO_ED_HOOK_ADD = 1,
diff --git a/tests/testsuite.at b/tests/testsuite.at
index ab24504..d9bb67d 100644
--- a/tests/testsuite.at
+++ b/tests/testsuite.at
@@ -89,6 +89,10 @@ AT_SETUP([Memory limiting during spawning])
AT_CHECK([$SCITECO -e "50*1000*1000,2EJ 0,128ED @EC'dd if=/dev/zero'"], 1, ignore, ignore)
AT_CLEANUP
+AT_SETUP([Q-Register stack cleanup])
+AT_CHECK([$SCITECO -e '@<:@a'], 0, ignore, ignore)
+AT_CLEANUP
+
AT_BANNER([Known Bugs])
AT_SETUP([Pattern matching overflow])