Is there a way to make SWI-Prolog Valgrind-clean?

Here is what I observe (note that I simply typed Control-D at the prompt):
$ export VALGRIND=yes $ valgrind --tool=memcheck -q --trace-children=yes --leak-check=yes --num-callers=100 --leak-resolution=high --suppressions=/home/roberto/ppl/ppl/tests/valgrind_suppressions /usr/local/bin/pl Welcome to SWI-Prolog (Multi-threaded, 32 bits, Version 5.6.61) Copyright (c) 1990-2008 University of Amsterdam. SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Please visit http://www.swi-prolog.org for details.
For help, use ?- help(Topic). or ?- apropos(Word).
?- % halt ==6515== ==6515== 24 bytes in 1 blocks are definitely lost in loss record 16 of 61 ==6515== at 0x40054E5: malloc (vg_replace_malloc.c:149) ==6515== by 0x806904F: SinitStreams (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x80E6B69: PL_initialise (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x8050D91: main (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== ==6515== ==6515== 24 bytes in 1 blocks are definitely lost in loss record 17 of 61 ==6515== at 0x40054E5: malloc (vg_replace_malloc.c:149) ==6515== by 0x806901D: SinitStreams (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x80E6B69: PL_initialise (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x8050D91: main (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== ==6515== ==6515== 24 bytes in 1 blocks are definitely lost in loss record 18 of 61 ==6515== at 0x40054E5: malloc (vg_replace_malloc.c:149) ==6515== by 0x8068FE3: SinitStreams (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x80E6B69: PL_initialise (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x8050D91: main (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== ==6515== ==6515== 1,024 bytes in 1 blocks are definitely lost in loss record 49 of 61 ==6515== at 0x40054E5: malloc (vg_replace_malloc.c:149) ==6515== by 0x805546F: PL_malloc (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x8057A4B: codeToAtom (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x80B8DD2: simple_term (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x80B71AA: complex_term (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x80BB6A7: read_term (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x80BC8AF: read_clause (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x80BCAEA: pl_read_clause_va (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x8064063: PL_next_solution (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x80AA604: callProlog (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x80DA15B: pl_with_mutex (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x805A9F1: callForeign (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x8061D6C: PL_next_solution (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x80AA233: prologToplevel (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x80E705F: PL_initialise (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x8050D91: main (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== ==6515== ==6515== 2,596 (44 direct, 2,552 indirect) bytes in 1 blocks are definitely lost in loss record 54 of 61 ==6515== at 0x40054E5: malloc (vg_replace_malloc.c:149) ==6515== by 0x805546F: PL_malloc (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x80D8546: allocSimpleMutex (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x8098B66: _lookupModule (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x80991A8: lookupModule (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x8055736: PL_predicate (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x80E5702: PL_cleanup (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x8054A41: PL_halt (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) ==6515== by 0x8050DB6: main (in /usr/local/lib/pl-5.6.61/bin/i686-linux/pl) $
Is there a way to configure/compile/execute SWI-Prolog so that it deallocates all memory before exiting? All the best,
Roberto
participants (1)
-
Roberto Bagnara