https://bugzilla.novell.com/show_bug.cgi?id=377738
Summary: Interleaved stack traces in multi-threaded program Product: Mono: Runtime Version: 1.2.6 Platform: PC OS/Version: RHEL 5 Status: NEW Severity: Normal Priority: P5 - None Component: JIT AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] QAContact: mono-bugs@lists.ximian.com Found By: Development When I press Ctrl+\ (SIGQUIT) to generate the stack traces of a running program, the output is very difficult to decipher because the stack traces are printed concurrently by each thread. A simple test case is attached. Expected output: Waiting... Full thread dump: "" tid=0x0x1124d0 this=0x0x21e10: at (wrapper managed-to-native) System.Threading.Thread.Join_internal (int,intptr) <0x00004> at (wrapper managed-to-native) System.Threading.Thread.Join_internal (int,intptr) <0xffffffff> at System.Threading.Thread.Join () <0x00012> at ThreadTest.Main (string[]) <0x00143> at (wrapper runtime-invoke) ThreadTest.runtime_invoke_void_string[] (object,intptr,intptr,intptr) <0xffffffff> "Thread1" tid=0x0xab1b90 this=0x0x21c30: at (wrapper managed-to-native) System.Threading.Thread.Sleep_internal (int) <0x00004> at (wrapper managed-to-native) System.Threading.Thread.Sleep_internal (int) <0xffffffff> at System.Threading.Thread.Sleep (int) <0x00016> at ThreadTest.runThread1 () <0x0000c> at (wrapper delegate-invoke) System.MulticastDelegate.invoke_void () <0xffffffff> at (wrapper runtime-invoke) System.Threading.ThreadStart.runtime_invoke_void (object,intptr,intptr,intptr) <0xffffffff> "Thread2" tid=0x0xc0fb90 this=0x0x21b40: at (wrapper managed-to-native) System.Threading.Thread.Sleep_internal (int) <0x00004> at (wrapper managed-to-native) System.Threading.Thread.Sleep_internal (int) <0xffffffff> at System.Threading.Thread.Sleep (int) <0x00016> at ThreadTest.runThread2 () <0x0000c> at (wrapper delegate-invoke) System.MulticastDelegate.invoke_void () <0xffffffff> at (wrapper runtime-invoke) System.Threading.ThreadStart.runtime_invoke_void (object,intptr,intptr,intptr) <0xffffffff> "Thread3" tid=0x0xdcfb90 this=0x0x21a50: at (wrapper managed-to-native) System.Threading.Thread.Sleep_internal (int) <0x00004> at (wrapper managed-to-native) System.Threading.Thread.Sleep_internal (int) <0xffffffff> at System.Threading.Thread.Sleep (int) <0x00016> at ThreadTest.runThread3 () <0x0000c> at (wrapper delegate-invoke) System.MulticastDelegate.invoke_void () <0xffffffff> at (wrapper runtime-invoke) System.Threading.ThreadStart.runtime_invoke_void (object,intptr,intptr,intptr) <0xffffffff> Done. Actual output: Waiting... Full thread dump: "" tid=0x0x14f6e0 this=0x0x21e10: "Thread1" tid=0x0x2ecbb90 this=0x0x21c30: at (wrapper managed-to-native) System.Threading.Thread.Sleep_internal (int) <0x00004> at (wrapper managed-to-native) System.Threading.Thread.Sleep_internal (int) <0xffffffff> at System.Threading.Thread.Sleep (int) <0x00016> at ThreadTest.runThread1 () <0x0000c> "Thread3" at (wrapper delegate-invoke) System.MulticastDelegate.invoke_void () <0xffffffff> tid=0x0x145bb90 this=0x0x21a50: at (wrapper runtime-invoke) System.Threading.ThreadStart.runtime_invoke_void (object,intptr,intptr,intptr) <0xffffffff> at (wrapper managed-to-native) System.Threading.Thread.Sleep_internal (int) <0x00004> at (wrapper managed-to-native) System.Threading.Thread.Sleep_internal (int) <0xffffffff> at System.Threading.Thread.Sleep (int) <0x00016> at ThreadTest.runThread3 () <0x0000c> at (wrapper delegate-invoke) System.MulticastDelegate.invoke_void () <0xffffffff> at (wrapper runtime-invoke) System.Threading.ThreadStart.runtime_invoke_void (object,intptr,intptr,intptr) <0xffffffff> "Thread2" tid=0x0x1c0eb90 this=0x0x21b40: at (wrapper managed-to-native) System.Threading.Thread.Sleep_internal (int) <0x00004> at (wrapper managed-to-native) System.Threading.Thread.Sleep_internal (int) <0xffffffff> at System.Threading.Thread.Sleep (int) <0x00016> at ThreadTest.runThread2 () <0x0000c> at (wrapper delegate-invoke) System.MulticastDelegate.invoke_void () <0xffffffff> at (wrapper runtime-invoke) System.Threading.ThreadStart.runtime_invoke_void (object,intptr,intptr,intptr) <0xffffffff> at (wrapper managed-to-native) System.Threading.Thread.Join_internal (int,intptr) <0x00004> at (wrapper managed-to-native) System.Threading.Thread.Join_internal (int,intptr) <0xffffffff> at System.Threading.Thread.Join () <0x00012> at ThreadTest.Main (string[]) <0x00143> at (wrapper runtime-invoke) ThreadTest.runtime_invoke_void_string[] (object,intptr,intptr,intptr) <0xffffffff> Done. Workaround: The Mono folks may have a better solution, but I fixed it locally by accumulating the stack trace of each thread into a string and then printing the result in one call to fprintf (see attached patch). Note that this patch only fixes the output for SIGQUIT; a similar fix may be necessary for handling other signals. I didn't test with Mono 1.9, but I compared Mono 1.2.6 to 1.9 and didn't see any changes that would be relevant for this issue. -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug. _______________________________________________ mono-bugs maillist - mono-bugs@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-bugs