diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2022-06-05 17:56:31 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2022-06-05 17:56:31 -0700 |
commit | 16305b28e7bd92a6f25610095d626d492020f3ee (patch) | |
tree | 372717339a172956afe858f17f0c556502cd1b30 /Makefile | |
parent | f407a269b7db5509fd5e36abc4b1de67e281bdd1 (diff) | |
download | txr-16305b28e7bd92a6f25610095d626d492020f3ee.tar.gz txr-16305b28e7bd92a6f25610095d626d492020f3ee.tar.bz2 txr-16305b28e7bd92a6f25610095d626d492020f3ee.zip |
txr: fix --free-all crash due to atexit order.
The --free-all feature is broken. It is needed for confirming
lack of memory leaks during development. What breaks it is the
atexit call to run_load_hooks in eval.c, which occurs after
the atexit call to free_all in txr.c which blows everything
away.
* Makefile (tst/tests/019/load-hook.ok): Let's put --free-all
on this test case, because it has to with the load hooks.
Make no mistake though: everything crashes with --free-all,
not this test case specifically.
* txr.c (opt_free_all): New global variable.
(free_all): Free resources only if opt_free_all is true.
Lose the paranoid called flag.
(main): Register free_all with atexit before callilng init.
This ensures that it will be called after any atexit
handlers registered as part of init, like the one in sysif.c
and eval.c.
(txr_main): The --free-all option now just sets opt_free_all.
* txr.h (opt_free_all): Declared.
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 1 |
1 files changed, 1 insertions, 0 deletions
@@ -440,6 +440,7 @@ tst/tests/016/%: TXR_DBG_OPTS := tst/tests/017/%: TXR_DBG_OPTS := tst/tests/018/%: TXR_DBG_OPTS := tst/tests/019/%: TXR_DBG_OPTS := +tst/tests/019/load-hook.ok: TXR_DBG_OPTS := --free-all tst/tests/014/dgram-stream.ok: | tst/tests/014/socket-basic.ok |