Menu

#97 Abort in Tcl allocator while eof pattern in expect_background

open
nobody
None
1
2014-08-18
2014-02-26
No

Expect version is 5.45
Tcl version is 8.5.13
OS: Ubuntu 13.10

Here are 2 sample scripts which seem to trigger systematically the abort in the tcl interpreter: https://gist.github.com/dgsb/9209160
runner.tcl will spawn several instances of runnee.tcl and wait through a vwait command for an eof on each of these spawn_id.
The variable waited is notified by an expect_background command on eof for each spawn_id

Here is the stack trace from gdb:

Core was generated by `tclsh ./runner.tcl'. 
Program terminated with signal 6, Aborted. 
#0  0x00007f110601ef77 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56 
56        ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory. 
(gdb) bt 
#0  0x00007f110601ef77 in __GI_raise (sig=sig@entry=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:56 
#1  0x00007f11060225e8 in __GI_abort () at abort.c:90 
#2  0x00007f1106454cbe in Tcl_PanicVA (format=<optimized out>, argList=argList@entry=0x7fff3bbd2988) at /build/buildd/tcl8.5-8.5.13/unix/../generic/tclPanic.c:101 
#3  0x00007f1106454d7c in Tcl_Panic (format=format@entry=0x7f110649d8f8 "alloc: invalid block: %p: %x %x") at /build/buildd/tcl8.5-8.5.13/unix/../generic/tclPanic.c:130 
#4  0x00007f110646f49f in Ptr2Block (ptr=ptr@entry=0x1150160 "\300\020\021\001") at /build/buildd/tcl8.5-8.5.13/unix/../generic/tclThreadAlloc.c:761 
#5  0x00007f110646ee7b in TclpFree (ptr=0x1150160 "\300\020\021\001") at /build/buildd/tcl8.5-8.5.13/unix/../generic/tclThreadAlloc.c:388 
#6  0x00007f110439a1da in ecases_remove_by_expi (interp=interp@entry=0x1084df0, exp_i=exp_i@entry=0x11110c0, ecmd=<optimized out>, ecmd=<optimized out>) at expect.c:1092 
#7  0x00007f110439aa92 in exp_i_remove_with_ecases (exp_i=0x11110c0, ecmd=0x7f11045b9e50 <exp_cmds+80>, interp=0x1084df0) at expect.c:1138 
#8  ecmd_remove_state (interp=interp@entry=0x1084df0, ecmd=ecmd@entry=0x7f11045b9e50 <exp_cmds+80>, esPtr=esPtr@entry=0x112eee0, direct=direct@entry=3) at expect.c:1181 
#9  0x00007f110439ce4e in exp_ecmd_remove_state_direct_and_indirect (interp=0x1084df0, esPtr=0x112eee0) at expect.c:1194 
#10 0x00007f11043960d9 in exp_state_prep_for_invalidation (interp=interp@entry=0x1084df0, esPtr=esPtr@entry=0x112eee0) at exp_command.c:267 
#11 0x00007f1104396c34 in exp_close (interp=interp@entry=0x1084df0, esPtr=esPtr@entry=0x112eee0) at exp_command.c:393 
#12 0x00007f110439e7b0 in expMatchProcess (interp=interp@entry=0x1084df0, eo=eo@entry=0x7fff3bbd2cd0, cc=-11, bg=bg@entry=1, detail=detail@entry=0x7f11043b0211 "expect_background") at expect.c:2380 
#13 0x00007f110439f185 in exp_background_channelhandler (clientData=<optimized out>, mask=<optimized out>) at expect.c:2491 
#14 0x00007f11064387b1 in Tcl_NotifyChannel (channel=0x111e8a0, mask=2) at /build/buildd/tcl8.5-8.5.13/unix/../generic/tclIO.c:7840 
#15 0x00007f11064888a7 in FileHandlerEventProc (evPtr=<optimized out>, flags=<optimized out>) at /build/buildd/tcl8.5-8.5.13/unix/../unix/tclUnixNotfy.c:694 
#16 FileHandlerEventProc (evPtr=0x118f8e0, flags=19959, flags@entry=-3) at /build/buildd/tcl8.5-8.5.13/unix/../unix/tclUnixNotfy.c:651 
#17 0x00007f1106451aaf in Tcl_ServiceEvent (flags=flags@entry=-3) at /build/buildd/tcl8.5-8.5.13/unix/../generic/tclNotify.c:675 
#18 0x00007f1106451de9 in Tcl_DoOneEvent (flags=flags@entry=-3) at /build/buildd/tcl8.5-8.5.13/unix/../generic/tclNotify.c:978 
#19 0x00007f110641cf16 in Tcl_VwaitObjCmd (clientData=<optimized out>, interp=0x1084df0, objc=<optimized out>, objv=<optimized out>) at /build/buildd/tcl8.5-8.5.13/unix/../generic/tclEvent.c:1348 
#20 0x00007f11063dcb80 in TclEvalObjvInternal (interp=interp@entry=0x1084df0, objc=objc@entry=2, objv=objv@entry=0x10892b8, command=command@entry=0xffffffffffffffff <Address 0xffffffffffffffff out of bounds>, length=length@entry=-1, 
    flags=flags@entry=0) at /build/buildd/tcl8.5-8.5.13/unix/../generic/tclBasic.c:3706 
#21 0x00007f110641f381 in TclExecuteByteCode (interp=interp@entry=0x1084df0, codePtr=codePtr@entry=0x110df60) at /build/buildd/tcl8.5-8.5.13/unix/../generic/tclExecute.c:2416 
#22 0x00007f110641db5f in TclCompEvalObj (interp=interp@entry=0x1084df0, objPtr=objPtr@entry=0x10f1a50, invoker=invoker@entry=0x10890b0, word=word@entry=2) at /build/buildd/tcl8.5-8.5.13/unix/../generic/tclExecute.c:1538 
#23 0x00007f11063de60b in TclEvalObjEx (interp=interp@entry=0x1084df0, objPtr=0x10f1a50, flags=flags@entry=0, invoker=0x10890b0, word=word@entry=2) at /build/buildd/tcl8.5-8.5.13/unix/../generic/tclBasic.c:5275 
#24 0x00007f11063f2856 in Tcl_WhileObjCmd (dummy=<optimized out>, interp=0x1084df0, objc=<optimized out>, objv=0x1089100) at /build/buildd/tcl8.5-8.5.13/unix/../generic/tclCmdMZ.c:3985 
#25 0x00007f11063dcb80 in TclEvalObjvInternal (interp=interp@entry=0x1084df0, objc=objc@entry=3, objv=objv@entry=0x1089100, 
    command=0x10a1cb9 "while {[llength $sid_list] > 0} {\n    vwait ::completed\n    if {\"timeout\" eq $::completed} {\n        error timeout\n    }\n    set idx [lsearch $sid_list $::completed]\n    if {-1 == $idx} {\n        erro"..., 
    length=342, flags=flags@entry=0) at /build/buildd/tcl8.5-8.5.13/unix/../generic/tclBasic.c:3706 
#26 0x00007f11063dd7ca in TclEvalEx (interp=interp@entry=0x1084df0, 
    script=0x10a1b20 "#!/bin/sh\n# \\\nexec tclsh \"$0\" \"$@\"\n\npackage require Expect\n\nset nb_subproc 20\nset sid_list [list]\nset ::completed {}\n\nfor {set i 0} {$i < $nb_subproc} {incr i} {\n    spawn [file normalize [file join ["..., numBytes=350, flags=flags@entry=0, line=17338624, line@entry=1, clNextOuter=clNextOuter@entry=0x0, 
    outerScript=0x10a1b20 "#!/bin/sh\n# \\\nexec tclsh \"$0\" \"$@\"\n\npackage require Expect\n\nset nb_subproc 20\nset sid_list [list]\nset ::completed {}\n\nfor {set i 0} {$i < $nb_subproc} {incr i} {\n    spawn [file normalize [file join ["...) at /build/buildd/tcl8.5-8.5.13/unix/../generic/tclBasic.c:4405 
#27 0x00007f11063dd306 in Tcl_EvalEx (interp=interp@entry=0x1084df0, script=<optimized out>, numBytes=<optimized out>, flags=flags@entry=0) at /build/buildd/tcl8.5-8.5.13/unix/../generic/tclBasic.c:4062 
#28 0x00007f1106443227 in Tcl_FSEvalFileEx (interp=interp@entry=0x1084df0, pathPtr=0x1080ea0, encodingName=<optimized out>) at /build/buildd/tcl8.5-8.5.13/unix/../generic/tclIOUtil.c:1856 
#29 0x00007f1106449cf3 in Tcl_Main (argc=<optimized out>, argv=0x7fff3bbd37e8, appInitProc=appInitProc@entry=0x4008d0 <Tcl_AppInit>) at /build/buildd/tcl8.5-8.5.13/unix/../generic/tclMain.c:439 
#30 0x00000000004007d0 in main (argc=<optimized out>, argv=<optimized out>) at /build/buildd/tcl8.5-8.5.13/unix/../unix/tclAppInit.c:85 
(gdb)

Discussion


Log in to post a comment.