From: Philippe W. <phi...@sk...> - 2019-11-14 01:46:25
|
On Tue, 2019-11-12 at 20:18 -0800, Karthik Jayaraman wrote: > > Thread 47: status = VgTs_Runnable (lwpid 1861) > ==1747== at 0x4C2922D: free (vg_replace_malloc.c:540) > ==1747== by 0x9A7CB7B: __libc_freeres (in /usr/lib64/libc-2.17.so) > ==1747== by 0x4A24739: _vgnU_freeres (vg_preloaded.c:77) > > client > stack range: ??????? client SP: 0x289569C8 > > valgrind > stack range: [0x1009516000 0x1009615FFF] top usage: 5064 of 1048576 > > But the interesting fact is, it works wonderfully well when same binary is running outside the container (on a VM). If my source binary has a memory link (as per Valgrind FAQs) I am puzzled as to why I am not encountering the issue when not running in a container. You are using the massif tool. Massif does not detect leaks or errors, it rather produces a report about the memory used (evolution, peak, ...). The above seems to be a crash at the time your program terminates, as the glibc __libc_freeres is called by valgrind function _vgnU_freeres at exit. If your program crashes at exit in __libc_freeres, it is recommended to use --run-libc-freeres=no: the user manual indicates to use this for buggy glibc. See user manual for more details. The fact that it crashes inside a docker and not in another environment might be explained by different glibc version or (as John said) because of another layout of the memory. Philippe |