[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Memory leaks in Octave
From: |
John W. Eaton |
Subject: |
Re: Memory leaks in Octave |
Date: |
Mon, 18 Sep 2017 10:45:51 -0400 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 |
On 09/14/2017 01:32 PM, Rik wrote:
The development branch of Octave has switched away from Valgrind (slow) to
using a fast, lightweight memory checker (Address Sanitizer) which is built
in to the code. It is very easy to do as there is a configure option,
"--enable-address-sanitizer-flags", which sets everything up. Because this
is new and relatively unknown, I wrote a Wiki entry for it at
http://wiki.octave.org/Finding_Memory_Leaks.
Thanks for documenting this.
Running '__run_test_suite__' seems to work. But I assume there are still
plenty of ways to cause problems because I found two within 5 minutes just
by trying a few commands. Maybe I was extraordinarily unlucky, but it
would be useful if others could build with the Address Sanitizer and then
run operate normally, i.e., use it for regular use and run your own scripts
through it to see if it provokes any errors.
I noticed some direct leaks when just starting octave-cli and exiting
and fixed them with this change:
http://hg.savannah.gnu.org/hgweb/octave/rev/a666e433aa21
Now I don't see any direct leaks when simply starting and exiting
octave-cli, but I do see large number of indirect leaks that look
something like
Indirect leak of 81472 byte(s) in 536 object(s) allocated from:
#0 0x7fb36c0b6100 in operator new(unsigned long)
(/usr/lib/x86_64-linux-gnu/libasan.so.4+0xdb100)
#1 0x7fb36ab489a0 in
octave::symbol_table::symbol_record::symbol_record(octave::symbol_table::scope*,
std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> > const&, octave_value const&, unsigned int)
/home/jwe/src/octave/libinterp/corefcn/symtab.h:625
#2 0x7fb36b64d18b in
octave::symbol_table::scope::insert(std::__cxx11::basic_string<char,
std::char_traits<char>, std::allocator<char> > const&, bool)
/home/jwe/src/octave/libinterp/corefcn/symtab.cc:1619
#3 0x7fb36ab44f7d in octave::base_lexer::handle_identifier()
/home/jwe/src/octave/libinterp/parse-tree/lex.ll:3171
These appear to be caused by this changeset:
http://hg.savannah.gnu.org/hgweb/octave/rev/ef85638c605a
because it prevents symbol table scopes from being cleaned up properly
when a scope has a parent. My goal with that patch was to avoid having
the parent scope disappear while it was still needed by the child
(nested or anonymous functions, for example). It looks like I was a
little to good at that job and prevented them from ever being deleted.
Ooops. I'm now looking at a way to fix this by using a different method
for caching the parent scope.
jwe
- Re: Memory leaks in Octave, Rik, 2017/09/15
- Re: Memory leaks in Octave, Rik, 2017/09/19
- Re: Memory leaks in Octave, Rik, 2017/09/19
- Re: Memory leaks in Octave, Rik, 2017/09/19
- Re: Memory leaks in Octave, Rik, 2017/09/19
- Re: Memory leaks in Octave, Rik, 2017/09/19