Hide Forgot
Description of problem: Using -re appears to lead to memory leaks in expect, its memory usage keeps going up indefinitely: Example: --------------------------------- #!/usr/bin/expect spawn yes log_user 0 while 1 { expect { -re ".+?\n" { # } } } --------------------------------- Running script above for couple seconds leads to: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 19334 root 20 0 1075m 606m 688 R 93.4 69.8 1:44.81 expect Version-Release number of selected component (if applicable): expect-5.44.1.15-4.el6.x86_64 How reproducible: 100% Steps to Reproduce: 1. run attached reproducer Actual results: expect memory usage keeps going up Expected results: expect memory usage should be stable Additional info: Reported also here: http://sourceforge.net/p/expect/patches/13/
The patch from page linked in comment 0 makes the issue go away: diff --git a/expect.c b/expect.c index 65e6e04..185f9f3 100644 --- a/expect.c +++ b/expect.c @@ -185,9 +185,9 @@ free_ecase( { if (ec->i_list->duration == EXP_PERMANENT) { if (ec->pat) { Tcl_DecrRefCount(ec->pat); } - if (ec->gate) { Tcl_DecrRefCount(ec->gate); } if (ec->body) { Tcl_DecrRefCount(ec->body); } } + if (ec->gate) { Tcl_DecrRefCount(ec->gate); } if (free_ilist) { ec->i_list->ecount--; Used memory is holding stable at: PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 31889 root 20 0 112m 2308 1796 R 94.5 0.3 1:43.09 expect
Thank you for bug report and investigation.