After running for many days under valgrind, it seems that the first
problem happens at exactly the same point the previous run crashed.
But it is a problem in one of my modules (a flex scanner), not tcl:
64494616
64494374
==12352== Invalid write of size 4
==12352== at 0xD950240: HTokenizerlex() (in
/opt/Ellogon/share/modules/HTokenizer/Linux/x86_64/libHTokenizer.so)
==12352== by 0xD952251: creole_HTokenizer(void*, Tcl_Interp*, int,
Tcl_Obj**) (in
/opt/Ellogon/share/modules/HTokenizer/Linux/x86_64/libHTokenizer.so)
==12352== by 0x4C5620D: TclNREvalObjv (tclBasic.c:4325)
==12352== by 0x4D1708A: TEBCresume (tclExecute.c:2900)
==12352== by 0x4C5629A: TclNRRunCallbacks (tclBasic.c:4359)
==12352== by 0x4C58E48: TclEvalObjEx (tclBasic.c:5939)
==12352== by 0x4C58DE1: Tcl_EvalObjEx (tclBasic.c:5920)
==12352== by 0x4C7C51C: Tcl_TimeObjCmd (tclCmdMZ.c:4095)
==12352== by 0x4C5620D: TclNREvalObjv (tclBasic.c:4325)
==12352== by 0x4D1708A: TEBCresume (tclExecute.c:2900)
==12352== by 0x4C5629A: TclNRRunCallbacks (tclBasic.c:4359)
==12352== by 0x4C55DED: Tcl_EvalObjv (tclBasic.c:4159)
==12352== Address 0xfe26dd8 is 0 bytes after a block of size 65,544 alloc'd
==12352== at 0x4A0887C: malloc (vg_replace_malloc.c:270)
==12352== by 0xD95189B: HTokenizerlex() (in
/opt/Ellogon/share/modules/HTokenizer/Linux/x86_64/libHTokenizer.so)
==12352== by 0xD952251: creole_HTokenizer(void*, Tcl_Interp*, int,
Tcl_Obj**) (in
/opt/Ellogon/share/modules/HTokenizer/Linux/x86_64/libHTokenizer.so)
==12352== by 0x4C5620D: TclNREvalObjv (tclBasic.c:4325)
==12352== by 0x4D1708A: TEBCresume (tclExecute.c:2900)
==12352== by 0x4C5629A: TclNRRunCallbacks (tclBasic.c:4359)
==12352== by 0x4C58E48: TclEvalObjEx (tclBasic.c:5939)
==12352== by 0x4C58DE1: Tcl_EvalObjEx (tclBasic.c:5920)
==12352== by 0x4C7C51C: Tcl_TimeObjCmd (tclCmdMZ.c:4095)
==12352== by 0x4C5620D: TclNREvalObjv (tclBasic.c:4325)
==12352== by 0x4D1708A: TEBCresume (tclExecute.c:2900)
==12352== by 0x4C5629A: TclNRRunCallbacks (tclBasic.c:4359)
==12352==
64494239
Not much info though...
And after about 15 documents, it stops under valgrind:
==12352== Invalid read of size 1
==12352== at 0x4A0A300: memcpy@@GLIBC_2.14 (mc_replace_strmem.c:882)
==12352== by 0x4D679B1: Tcl_DuplicateObj (tclObj.c:1587)
==12352== by 0x4CFE529: DictIncrCmd (tclDictObj.c:2166)
==12352== by 0x4C5620D: TclNREvalObjv (tclBasic.c:4325)
==12352== by 0x4D1708A: TEBCresume (tclExecute.c:2900)
==12352== by 0x4C5629A: TclNRRunCallbacks (tclBasic.c:4359)
==12352== by 0x4C55DED: Tcl_EvalObjv (tclBasic.c:4159)
==12352== by 0x4C5822D: TclEvalEx (tclBasic.c:5265)
==12352== by 0x4D55099: Tcl_FSEvalFileEx (tclIOUtil.c:1809)
==12352== by 0x4D5F0F5: Tcl_MainEx (tclMain.c:417)
==12352== by 0x40098A: main (tclAppInit.c:84)
==12352== Address 0xc1000000c1 is not stack'd, malloc'd or (recently)
free'd
==12352==
==12352==
==12352== Process terminating with default action of signal 11 (SIGSEGV)
==12352== Access not within mapped region at address 0xC1000000C1
==12352== at 0x4A0A300: memcpy@@GLIBC_2.14 (mc_replace_strmem.c:882)
==12352== by 0x4D679B1: Tcl_DuplicateObj (tclObj.c:1587)
==12352== by 0x4CFE529: DictIncrCmd (tclDictObj.c:2166)
==12352== by 0x4C5620D: TclNREvalObjv (tclBasic.c:4325)
==12352== by 0x4D1708A: TEBCresume (tclExecute.c:2900)
==12352== by 0x4C5629A: TclNRRunCallbacks (tclBasic.c:4359)
==12352== by 0x4C55DED: Tcl_EvalObjv (tclBasic.c:4159)
==12352== by 0x4C5822D: TclEvalEx (tclBasic.c:5265)
==12352== by 0x4D55099: Tcl_FSEvalFileEx (tclIOUtil.c:1809)
==12352== by 0x4D5F0F5: Tcl_MainEx (tclMain.c:417)
==12352== by 0x40098A: main (tclAppInit.c:84)
==12352== If you believe this happened as a result of a stack
==12352== overflow in your program's main thread (unlikely but
==12352== possible), you can try to increase the size of the
==12352== main thread stack using the --main-stacksize= flag.
==12352== The main thread stack size used in this run was 8388608.
George