Search code examples
bashmemory-leaksdev-null

Redirect memory leak error message in bash


I use espeak with mbrola in a small tea timer script:

timer()
{ sleep $1 && espeak -v mb-en1 -a 200  "Alert, alert, alert, $2" &> /dev/null; }

Unfortunately there seems to be a memory leak in mbrola; it does not stop it from working though.

$ espeak -v mb-en1 -a 200  "test" &> /dev/null 
*** Error in `mbrola': free(): invalid pointer: 0x09640180 ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x6737a)[0xf753637a]
/lib/i386-linux-gnu/libc.so.6(+0x6dfb7)[0xf753cfb7]
/lib/i386-linux-gnu/libc.so.6(+0x6e776)[0xf753d776]
/lib/i386-linux-gnu/libc.so.6(_IO_wsetb+0x59)[0xf7530d79]
/lib/i386-linux-gnu/libc.so.6(+0x6c6fc)[0xf753b6fc]
/lib/i386-linux-gnu/libc.so.6(+0x2e742)[0xf74fd742]
/lib/i386-linux-gnu/libc.so.6(+0x2e801)[0xf74fd801]
mbrola(free+0x60)[0x8048c0c]
======= Memory map: ========
08048000-08050000 r-xp 00000000 fe:01 2883715                            /usr/bin/mbrola
08050000-08051000 rwxp 00007000 fe:01 2883715                            /usr/bin/mbrola
095ff000-09641000 rwxp 00000000 00:00 0                                  [heap]
f7300000-f7321000 rwxp 00000000 00:00 0 
f7321000-f7400000 ---p 00000000 00:00 0 
f74af000-f74cb000 r-xp 00000000 fe:01 11534736                           /lib/i386-linux-gnu/libgcc_s.so.1
f74cb000-f74cc000 r-xp 0001b000 fe:01 11534736                           /lib/i386-linux-gnu/libgcc_s.so.1
f74cc000-f74cd000 rwxp 0001c000 fe:01 11534736                           /lib/i386-linux-gnu/libgcc_s.so.1
f74cd000-f74cf000 rwxp 00000000 00:00 0 
f74cf000-f7680000 r-xp 00000000 fe:01 11534349                           /lib/i386-linux-gnu/libc-2.24.so
f7680000-f7682000 r-xp 001b0000 fe:01 11534349                           /lib/i386-linux-gnu/libc-2.24.so
f7682000-f7683000 rwxp 001b2000 fe:01 11534349                           /lib/i386-linux-gnu/libc-2.24.so
f7683000-f7686000 rwxp 00000000 00:00 0 
f7686000-f76d9000 r-xp 00000000 fe:01 11534358                           /lib/i386-linux-gnu/libm-2.24.so
f76d9000-f76da000 r-xp 00052000 fe:01 11534358                           /lib/i386-linux-gnu/libm-2.24.so
f76da000-f76db000 rwxp 00053000 fe:01 11534358                           /lib/i386-linux-gnu/libm-2.24.so
f76fd000-f7700000 rwxp 00000000 00:00 0 
f7700000-f7702000 r--p 00000000 00:00 0                                  [vvar]
f7702000-f7704000 r-xp 00000000 00:00 0                                  [vdso]
f7704000-f7726000 r-xp 00000000 fe:01 11534341                           /lib/i386-linux-gnu/ld-2.24.so
f7726000-f7727000 rwxp 00000000 00:00 0 
f7727000-f7728000 r-xp 00022000 fe:01 11534341                           /lib/i386-linux-gnu/ld-2.24.so
f7728000-f7729000 rwxp 00023000 fe:01 11534341                           /lib/i386-linux-gnu/ld-2.24.so
ffe64000-ffe85000 rwxp 00000000 00:00 0                                  [stack]
^C
*** Error in `mbrola': free(): invalid pointer: 0x081632a8 ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x6737a)[0xf756737a]
/lib/i386-linux-gnu/libc.so.6(+0x6dfb7)[0xf756dfb7]
/lib/i386-linux-gnu/libc.so.6(+0x6e776)[0xf756e776]
/lib/i386-linux-gnu/libc.so.6(_IO_wsetb+0x59)[0xf7561d79]
/lib/i386-linux-gnu/libc.so.6(+0x6c6fc)[0xf756c6fc]
/lib/i386-linux-gnu/libc.so.6(+0x2e742)[0xf752e742]
/lib/i386-linux-gnu/libc.so.6(+0x2e801)[0xf752e801]
mbrola(free+0x60)[0x8048c0c]
======= Memory map: ========
08048000-08050000 r-xp 00000000 fe:01 2883715                            /usr/bin/mbrola
08050000-08051000 rwxp 00007000 fe:01 2883715                            /usr/bin/mbrola
08122000-08164000 rwxp 00000000 00:00 0                                  [heap]
f7300000-f7321000 rwxp 00000000 00:00 0 
f7321000-f7400000 ---p 00000000 00:00 0 
f74e0000-f74fc000 r-xp 00000000 fe:01 11534736                           /lib/i386-linux-gnu/libgcc_s.so.1
f74fc000-f74fd000 r-xp 0001b000 fe:01 11534736                           /lib/i386-linux-gnu/libgcc_s.so.1
f74fd000-f74fe000 rwxp 0001c000 fe:01 11534736                           /lib/i386-linux-gnu/libgcc_s.so.1
f74fe000-f7500000 rwxp 00000000 00:00 0 
f7500000-f76b1000 r-xp 00000000 fe:01 11534349                           /lib/i386-linux-gnu/libc-2.24.so
f76b1000-f76b3000 r-xp 001b0000 fe:01 11534349                           /lib/i386-linux-gnu/libc-2.24.so
f76b3000-f76b4000 rwxp 001b2000 fe:01 11534349                           /lib/i386-linux-gnu/libc-2.24.so
f76b4000-f76b7000 rwxp 00000000 00:00 0 
f76b7000-f770a000 r-xp 00000000 fe:01 11534358                           /lib/i386-linux-gnu/libm-2.24.so
f770a000-f770b000 r-xp 00052000 fe:01 11534358                           /lib/i386-linux-gnu/libm-2.24.so
f770b000-f770c000 rwxp 00053000 fe:01 11534358                           /lib/i386-linux-gnu/libm-2.24.so
f772e000-f7731000 rwxp 00000000 00:00 0 
f7731000-f7733000 r--p 00000000 00:00 0                                  [vvar]
f7733000-f7735000 r-xp 00000000 00:00 0                                  [vdso]
f7735000-f7757000 r-xp 00000000 fe:01 11534341                           /lib/i386-linux-gnu/ld-2.24.so
f7757000-f7758000 rwxp 00000000 00:00 0 
f7758000-f7759000 r-xp 00022000 fe:01 11534341                           /lib/i386-linux-gnu/ld-2.24.so
f7759000-f775a000 rwxp 00023000 fe:01 11534341                           /lib/i386-linux-gnu/ld-2.24.so
ffac0000-ffae1000 rwxp 00000000 00:00 0   

As you can see I get this ugly error message outputted on my terminal although I want to sink stdout & stderr in /dev/null.

How to discard the memory leak information properly?


Solution

  • Try setting the environment variable MALLOC_CHECK_ to zero.

    How to force abort on "glibc detected *** free(): invalid pointer"