<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
Thank you for looking into stuff Peter. We really need more help.<BR>
Can you try again either with head or the release commit I just did? Thanks.<BR>
 <BR>
See:<BR>
<A href="http://modula3.elegosoft.com/cgi-bin/cvsweb.cgi/cm3/m3-libs/libm3/src/rw">http://modula3.elegosoft.com/cgi-bin/cvsweb.cgi/cm3/m3-libs/libm3/src/rw</A><BR>
<A href="http://modula3.elegosoft.com/cgi-bin/cvsweb.cgi/cm3/m3-libs/libm3/src/rw/AutoFlushWr.m3">http://modula3.elegosoft.com/cgi-bin/cvsweb.cgi/cm3/m3-libs/libm3/src/rw/AutoFlushWr.m3</A><BR>
etc.<BR>
 <BR>
Thanks,<BR>
 - Jay<BR> <BR>
<HR id=stopSpelling>
Date: Mon, 7 Dec 2009 22:17:50 +1100<BR>From: peter.mckinna@gmail.com<BR>To: m3devel@elegosoft.com<BR>Subject: [M3devel] AutoFlushWr race.<BR><BR>Hi,<BR><BR> I thought I would have a try at fixing the problem in AutoFlushWr with the little program below.<BR>Alas I couldnt get a grip on it so maybe you guys could shed some light.<BR><BR>This was with RC4 and on an amd64 linux box.<BR><BR>It invariably crashes in FileWr.Seek where some invariant seems to be<BR>awry so obviously the worker thread created in AutoFlushWr is hitting or causing<BR>a race condition. Probably easily fixed.<BR><BR>The thing that intrigued me was that most of the time running it did not cause<BR>the normal crash sequence and I had to ctrl-c to get back to the bash prompt<BR>which judging from the stack trace something in the threads area is amiss.<BR><BR><BR>Regards Peter<BR><BR><BR><BR>MODULE Main;<BR><BR>IMPORT FileWr,Wr,Rd,AutoFlushWr,Stdio,IO,Fmt,Thread;<BR><BR>VAR<BR>  myout := NEW(AutoFlushWr.T).init(Stdio.stdout);<BR><BR>BEGIN<BR>  FOR i := 0 TO 10000 DO<BR>    Wr.PutText(myout,Fmt.Int(i) & "\n");<BR>  END;<BR><BR>(*<BR>  Thread.Pause(1.0D0);<BR>  IO.Put("hit enter to end\n");<BR>*)<BR><BR>  EVAL Rd.GetChar(Stdio.stdin);<BR><BR>END Main.<BR><BR><BR><BR><BR><BR>... some iterations and<BR>5155<BR>5156<BR>5157<BR>5158<BR>5159<BR>5160<BR>5161<BR>5162<BR>5163<BR>5164<BR>5165<BR>5166<BR>5167<BR>5168<BR>5169<BR>5170<BR>5171<BR>5172<BR>5173<BR>5174<BR><BR><BR>***<BR>*** runtime error:<BR>***    Exception "FileWr.Error" not in RAISES list<BR>***    file "../src/rw/FileWr.m3", line 81<BR>***<BR><BR><BR>Program received signal SIGABRT, Aborted.<BR>0x00007f1a8b6beed5 in raise () from /lib/libc.so.6<BR><BR>(m3gdb) thread apply all bt<BR><BR>Thread 3 (Thread 1106278736 (LWP 5197)):<BR>#0  0x00007f1a8b9ead29 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0<BR>#1  0x00007f1a8bef8d4f in ThreadPThread__pthread_cond_wait (cond=0x24d0170,<BR>    mutex=0x24d0770) at ../src/thread/PTHREAD/ThreadPThreadC.c:326<BR>#2  0x00007f1a8bef1ce0 in XWait (self=16_00000000024f2a48, m=16_00000000024ef030,<BR>    c=16_00000000024ef0b8, alertable=FALSE)<BR>    at ../src/thread/PTHREAD/ThreadPThread.m3:238<BR>#3  0x00007f1a8bef214d in Wait (m=16_00000000024ef030, c=16_00000000024ef0b8)<BR>    at ../src/thread/PTHREAD/ThreadPThread.m3:280<BR>#4  0x00007f1a8c9e2c62 in Worker (cl=16_00000000024f2a38)<BR>    at ../src/rw/AutoFlushWr.m3:211<BR>#5  0x00007f1a8bef4447 in RunThread (me=16_00000000024d0a40)<BR>    at ../src/thread/PTHREAD/ThreadPThread.m3:589<BR>#6  0x00007f1a8bef4140 in ThreadBase (param=16_00000000024d0a40)<BR>    at ../src/thread/PTHREAD/ThreadPThread.m3:565<BR>#7  0x00007f1a8b9e6fc7 in start_thread () from /lib/libpthread.so.0<BR>#8  0x00007f1a8b75c5ad in clone () from /lib/libc.so.6<BR>#9  0x0000000000000000 in ?? ()<BR><BR>Thread 2 (Thread 139752010405600 (LWP 5194)):<BR>#0  0x00007f1a8b6beed5 in raise () from /lib/libc.so.6<BR>#1  0x00007f1a8b6c03f3 in abort () from /lib/libc.so.6<BR>#2  0x00007f1a8beef0ff in Crash () at ../src/runtime/POSIX/RTOS.m3:20<BR>#3  0x00007f1a8bee2b1d in Crash (msg=NIL) at ../src/runtime/common/RTProcess.m3:65<BR>#4  0x00007f1a8bedffba in EndError (crash=TRUE) at ../src/runtime/common/RTError.m3:118<BR>#5  0x00007f1a8bedfcb2 in MsgS (file=16_00007f1a8ccc84d8, line=81,<BR>    msgA=16_00007f1a8c12dda8, msgB=16_000000000250e078, msgC=16_00007f1a8c12ddf0)<BR>    at ../src/runtime/common/RTError.m3:40<BR>#6  0x00007f1a8bee048d in Crash (a=<BR>    RECORD exception = 16_00007f1a8c124ca0; arg = 16_000000000000000d; module = 16_00007f1a8ccc8540; line = 81; pc = NIL; info0 = NIL; info1 = NIL; un_except = 16_00007f1a8ccc8380; un_arg = NIL;  END, raises=TRUE, rte=16_00007f1a8c124ca0)<BR>    at ../src/runtime/common/RTException.m3:79<BR>#7  0x00007f1a8bee0186 in DefaultBackstop (a=<BR>    RECORD exception = 16_00007f1a8c124ca0; arg = 16_000000000000000d; module = 16_00007f1a8ccc8540; line = 81; pc = NIL; info0 = NIL; info1 = NIL; un_except = 16_00007f1a8ccc8380; un_arg = NIL;  END, raises=FALSE) at ../src/runtime/common/RTException.m3:41<BR>#8  0x00007f1a8bee0076 in InvokeBackstop (a=<BR>    RECORD exception = 16_00007f1a8c124ca0; arg = 16_000000000000000d; module = 16_00007f1a8ccc8540; line = 81; pc = NIL; info0 = NIL; info1 = NIL; un_except = 16_00007f1a8ccc8380; un_arg = NIL;  END, raises=FALSE) at ../src/runtime/common/RTException.m3:25<BR>#9  0x00007f1a8bef03db in Raise (act=<BR>    RECORD exception = 16_00007f1a8c124ca0; arg = 16_000000000000000d; module = 16_00007f1a8ccc8540; line = 81; pc = NIL; info0 = NIL; info1 = NIL; un_except = 16_00007f1a8ccc8380; un_arg = NIL;  END) at ../src/runtime/ex_frame/RTExFrame.m3:29<BR>---Type <return> to continue, or q <return> to quit---<BR>#10 0x00007f1a8bee01f6 in DefaultBackstop (a=<BR>    RECORD exception = 16_00007f1a8c124ca0; arg = 16_000000000000000d; module = 16_00007f1a8ccc8540; line = 81; pc = NIL; info0 = NIL; info1 = NIL; un_except = 16_00007f1a8ccc8380; un_arg = NIL;  END, raises=TRUE) at ../src/runtime/common/RTException.m3:47<BR>#11 0x00007f1a8bee0076 in InvokeBackstop (a=<BR>    RECORD exception = 16_00007f1a8c124ca0; arg = 16_000000000000000d; module = 16_00007f1a8ccc8540; line = 81; pc = NIL; info0 = NIL; info1 = NIL; un_except = 16_00007f1a8ccc8380; un_arg = NIL;  END, raises=TRUE) at ../src/runtime/common/RTException.m3:25<BR>#12 0x00007f1a8bef04e8 in Raise (act=<BR>    RECORD exception = 16_00007f1a8c124ca0; arg = 16_000000000000000d; module = 16_00007f1a8ccc8540; line = 81; pc = NIL; info0 = NIL; info1 = NIL; un_except = 16_00007f1a8ccc8380; un_arg = NIL;  END) at ../src/runtime/ex_frame/RTExFrame.m3:51<BR>#13 0x00007f1a8bec791f in Raise (ex=16_00007f1a8ccc8380, arg=NIL,<BR>    module=16_00007f1a8ccc8540, line=81) at ../src/runtime/common/RTHooks.m3:79<BR>#14 0x00007f1a8c9dd8f4 in Seek (wr=16_00000000024e9448, n=24765)<BR>    at ../src/rw/FileWr.m3:81<BR>#15 0x00007f1a8c9e0b0e in Seek (wr=16_00000000024ef0d8, n=24765)<BR>    at ../src/rw/AutoFlushWr.m3:106<BR>#16 0x00007f1a8c9d684e in PutStringDefault (wr=16_00000000024ef0d8, a=<BR>    {'5','1','7','5','\n'}) at ../src/rw/Wr.m3:193<BR>#17 0x00007f1a8c9d5b4c in FastPutText (wr=16_00000000024ef0d8, t=16_000000000250e040)<BR>    at ../src/rw/Wr.m3:105<BR>#18 0x00007f1a8c9d598a in PutText (wr=16_00000000024ef0d8, t=16_000000000250e040)<BR>    at ../src/rw/Wr.m3:93<BR>#19 0x000000000040108c in Main (mode=1) at ../src/Main.m3:10<BR>#20 0x00007f1a8bedf12b in RunMainBody (m=16_00000000006016c0)<BR>    at ../src/runtime/common/RTLinker.m3:399<BR>#21 0x00007f1a8bede312 in AddUnitI (m=16_00000000006016c0)<BR>    at ../src/runtime/common/RTLinker.m3:113<BR>#22 0x00007f1a8bede3b0 in AddUnit (b={"Main_M3", Declared at: ../src/Main.m3:8})<BR>    at ../src/runtime/common/RTLinker.m3:122<BR>#23 0x0000000000400f2c in main (argc=1, argv=0x7fff6d396f08, envp=0x7fff6d396f18)<BR>    at _<A>m3main.mc:4</A><BR>#24 0x00007f1a8b6ab1a6 in __libc_start_main () from /lib/libc.so.6<BR>#25 0x0000000000400e29 in _start ()<BR><BR>Thread 1 (LWP 5194):<BR>#0  0x00007f1a8b6beed5 in raise () from /lib/libc.so.6<BR>#1  0x00007f1a8b6c03f3 in abort () from /lib/libc.so.6<BR>#2  0x00007f1a8beef0ff in Crash () at ../src/runtime/POSIX/RTOS.m3:20<BR>#3  0x00007f1a8bee2b1d in Crash (msg=NIL) at ../src/runtime/common/RTProcess.m3:65<BR>#4  0x00007f1a8bedffba in EndError (crash=TRUE) at ../src/runtime/common/RTError.m3:118<BR>#5  0x00007f1a8bedfcb2 in MsgS (file=16_00007f1a8ccc84d8, line=81,<BR>    msgA=16_00007f1a8c12dda8, msgB=16_000000000250e078, msgC=16_00007f1a8c12ddf0)<BR>    at ../src/runtime/common/RTError.m3:40<BR>#6  0x00007f1a8bee048d in Crash (a=<BR>---Type <return> to continue, or q <return> to quit---<BR>    RECORD exception = 16_00007f1a8c124ca0; arg = 16_000000000000000d; module = 16_00007f1a8ccc8540; line = 81; pc = NIL; info0 = NIL; info1 = NIL; un_except = 16_00007f1a8ccc8380; un_arg = NIL;  END, raises=TRUE, rte=16_00007f1a8c124ca0)<BR>    at ../src/runtime/common/RTException.m3:79<BR>#7  0x00007f1a8bee0186 in DefaultBackstop (a=<BR>    RECORD exception = 16_00007f1a8c124ca0; arg = 16_000000000000000d; module = 16_00007f1a8ccc8540; line = 81; pc = NIL; info0 = NIL; info1 = NIL; un_except = 16_00007f1a8ccc8380; un_arg = NIL;  END, raises=FALSE) at ../src/runtime/common/RTException.m3:41<BR>#8  0x00007f1a8bee0076 in InvokeBackstop (a=<BR>    RECORD exception = 16_00007f1a8c124ca0; arg = 16_000000000000000d; module = 16_00007f1a8ccc8540; line = 81; pc = NIL; info0 = NIL; info1 = NIL; un_except = 16_00007f1a8ccc8380; un_arg = NIL;  END, raises=FALSE) at ../src/runtime/common/RTException.m3:25<BR>#9  0x00007f1a8bef03db in Raise (act=<BR>    RECORD exception = 16_00007f1a8c124ca0; arg = 16_000000000000000d; module = 16_00007f1a8ccc8540; line = 81; pc = NIL; info0 = NIL; info1 = NIL; un_except = 16_00007f1a8ccc8380; un_arg = NIL;  END) at ../src/runtime/ex_frame/RTExFrame.m3:29<BR>#10 0x00007f1a8bee01f6 in DefaultBackstop (a=<BR>    RECORD exception = 16_00007f1a8c124ca0; arg = 16_000000000000000d; module = 16_00007f1a8ccc8540; line = 81; pc = NIL; info0 = NIL; info1 = NIL; un_except = 16_00007f1a8ccc8380; un_arg = NIL;  END, raises=TRUE) at ../src/runtime/common/RTException.m3:47<BR>#11 0x00007f1a8bee0076 in InvokeBackstop (a=<BR>    RECORD exception = 16_00007f1a8c124ca0; arg = 16_000000000000000d; module = 16_00007f1a8ccc8540; line = 81; pc = NIL; info0 = NIL; info1 = NIL; un_except = 16_00007f1a8ccc8380; un_arg = NIL;  END, raises=TRUE) at ../src/runtime/common/RTException.m3:25<BR>#12 0x00007f1a8bef04e8 in Raise (act=<BR>    RECORD exception = 16_00007f1a8c124ca0; arg = 16_000000000000000d; module = 16_00007f1a8ccc8540; line = 81; pc = NIL; info0 = NIL; info1 = NIL; un_except = 16_00007f1a8ccc8380; un_arg = NIL;  END) at ../src/runtime/ex_frame/RTExFrame.m3:51<BR>#13 0x00007f1a8bec791f in Raise (ex=16_00007f1a8ccc8380, arg=NIL,<BR>    module=16_00007f1a8ccc8540, line=81) at ../src/runtime/common/RTHooks.m3:79<BR>#14 0x00007f1a8c9dd8f4 in Seek (wr=16_00000000024e9448, n=24765)<BR>    at ../src/rw/FileWr.m3:81<BR>#15 0x00007f1a8c9e0b0e in Seek (wr=16_00000000024ef0d8, n=24765)<BR>    at ../src/rw/AutoFlushWr.m3:106<BR>#16 0x00007f1a8c9d684e in PutStringDefault (wr=16_00000000024ef0d8, a=<BR>    {'5','1','7','5','\n'}) at ../src/rw/Wr.m3:193<BR>#17 0x00007f1a8c9d5b4c in FastPutText (wr=16_00000000024ef0d8, t=16_000000000250e040)<BR>    at ../src/rw/Wr.m3:105<BR>#18 0x00007f1a8c9d598a in PutText (wr=16_00000000024ef0d8, t=16_000000000250e040)<BR>    at ../src/rw/Wr.m3:93<BR>#19 0x000000000040108c in Main (mode=1) at ../src/Main.m3:10<BR>#20 0x00007f1a8bedf12b in RunMainBody (m=16_00000000006016c0)<BR>    at ../src/runtime/common/RTLinker.m3:399<BR>#21 0x00007f1a8bede312 in AddUnitI (m=16_00000000006016c0)<BR>    at ../src/runtime/common/RTLinker.m3:113<BR>#22 0x00007f1a8bede3b0 in AddUnit (b={"Main_M3", Declared at: ../src/Main.m3:8})<BR>---Type <return> to continue, or q <return> to quit---<BR>    at ../src/runtime/common/RTLinker.m3:122<BR>#23 0x0000000000400f2c in main (argc=1, argv=0x7fff6d396f08, envp=0x7fff6d396f18)<BR>    at _<A>m3main.mc:4</A><BR>#24 0x00007f1a8b6ab1a6 in __libc_start_main () from /lib/libc.so.6<BR>#25 0x0000000000400e29 in _start ()<BR>#0  0x00007f1a8b6beed5 in raise () from /lib/libc.so.6<BR>(m3gdb)     <BR><BR><BR>Now why is the stack trace duplicated for Thread 1 and Thread 2 and also<BR>why is there that last line #0  0x00007f1a8b6beed5 in raise () from /lib/libc.so.6 in the<BR>last frame? The first and last frame are duplicated. Havent seen it in other stack traces.<BR>Maybe something wrong with my setup?<BR><BR><BR>running once more we get<BR><BR>....... some iterations<BR>4311<BR>4312<BR>4313<BR>4314<BR>4315<BR>4316<BR>4317<BR>4318<BR><BR><BR>***<BR>*** runtime error:<BR>***    Exception "FileWr.Error" not in RAISES list<BR>***    file "../src/rw/FileWr.m3", line 81<BR>***<BR><BR>OK here I had to ctrl-c it since it is hung<BR><BR><BR>^C<BR>Program received signal SIGINT, Interrupt.<BR>0x00007fd82e657384 in __lll_lock_wait () from /lib/libpthread.so.0<BR>(m3gdb) thread apply all bt<BR><BR>Thread 3 (Thread 1113143632 (LWP 5200)):<BR>#0  0x00007fd82e654d29 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0<BR>#1  0x00007fd82eb62d4f in ThreadPThread__pthread_cond_wait (cond=0x19a9170,<BR>    mutex=0x19a9770) at ../src/thread/PTHREAD/ThreadPThreadC.c:326<BR>#2  0x00007fd82eb5bce0 in XWait (self=16_00000000019caa48, m=16_00000000019c7030,<BR>    c=16_00000000019c70b8, alertable=FALSE)<BR>    at ../src/thread/PTHREAD/ThreadPThread.m3:238<BR>#3  0x00007fd82eb5c14d in Wait (m=16_00000000019c7030, c=16_00000000019c70b8)<BR>    at ../src/thread/PTHREAD/ThreadPThread.m3:280<BR>#4  0x00007fd82f64cc62 in Worker (cl=16_00000000019caa38)<BR>    at ../src/rw/AutoFlushWr.m3:211<BR>#5  0x00007fd82eb5e447 in RunThread (me=16_00000000019a9a40)<BR>    at ../src/thread/PTHREAD/ThreadPThread.m3:589<BR>#6  0x00007fd82eb5e140 in ThreadBase (param=16_00000000019a9a40)<BR>    at ../src/thread/PTHREAD/ThreadPThread.m3:565<BR>#7  0x00007fd82e650fc7 in start_thread () from /lib/libpthread.so.0<BR>#8  0x00007fd82e3c65ad in clone () from /lib/libc.so.6<BR>#9  0x0000000000000000 in ?? ()<BR><BR>Thread 2 (Thread 140566490150624 (LWP 5198)):<BR>#0  0x00007fd82e657384 in __lll_lock_wait () from /lib/libpthread.so.0<BR>#1  0x00007fd82e652bf0 in _L_lock_102 () from /lib/libpthread.so.0<BR>../../gdb/gdb/dwarf2-frame.c:490: internal-error: Unknown CFI encountered.<BR>A problem internal to GDB has been detected,<BR>further debugging may prove unreliable.<BR>Quit this debugging session? (y or n)              <BR><BR><BR>Is this a problem with m3gdb?  <BR><BR>Running this program without the debugger more likely than not will produce a hung program, so <BR>I suspect some threading problem. That lll_lock_wait is definitely suspicious.<BR><BR><BR>                                         </body>
</html>