[Mono-bugs] [Bug 46650][Nor] New - Race condition in code compilation (with delegates).

bugzilla-daemon@rocky.ximian.com bugzilla-daemon@rocky.ximian.com
Sun, 20 Jul 2003 18:51:08 -0400 (EDT)


Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by miguel@ximian.com.

http://bugzilla.ximian.com/show_bug.cgi?id=46650

--- shadow/46650	Sun Jul 20 18:51:08 2003
+++ shadow/46650.tmp.24888	Sun Jul 20 18:51:08 2003
@@ -0,0 +1,332 @@
+Bug#: 46650
+Product: Mono/Runtime
+Version: unspecified
+OS: 
+OS Details: 
+Status: NEW   
+Resolution: 
+Severity: 
+Priority: Normal
+Component: misc
+AssignedTo: mono-bugs@ximian.com                            
+ReportedBy: miguel@ximian.com               
+QAContact: mono-bugs@ximian.com
+TargetMilestone: ---
+URL: 
+Cc: 
+Summary: Race condition in code compilation (with delegates).
+
+I have attached a small program that uses delegates and BeginInvoke to.
+This sample program fails *sometimes*, it is hard to reproduce, and in my
+machine it can take up to 10 minutes to show up.
+
+To run do:
+
+  mcs program.cs
+  while true; do mono program.exe; done
+
+This will eventually lock-up, takes about 10 minutes on my machine.
+
+This happens on Debian Sid and Red Hat 9;  The problem was originally
+reported by the Dashboard people.  
+
+There are a few threads that have no useful stack trace, but the ones that
+have show that there are a few Mutexes that are being acquired:
+
+   metadata_section 
+
+Being requirested by mono_ldtfn
+
+And the domain->lock
+
+These are the stacktraces from when I locked the app:
+
+(gdb) thread apply all bt
+
+Thread 9 (Thread 1085951280 (LWP 391)):
+#0  0xffffe002 in ?? ()
+
+Thread 8 (Thread 1091898672 (LWP 392)):
+#0  0xffffe002 in ?? ()
+#1  0x400d52f3 in EnterCriticalSection (section=0x40134444) at
+critical-sections.c:138
+#2  0x4002e0b9 in mono_ldftn (method=0x80f3ba8) at jit-icalls.c:20
+#3  0x080e4f88 in ?? ()
+#4  0x080e4a72 in ?? ()
+#5  0x4004365b in mono_jit_runtime_invoke (method=0x80b7868, obj=0x0,
+params=0x411507e4, exc=0x0)
+    at mini.c:6782
+#6  0x4008e956 in mono_runtime_invoke (method=0x80b7868, obj=0x0,
+params=0x411507e4, exc=0x0) at object.c:684
+#7  0x4008f4d6 in mono_runtime_exec_main (method=0x80b7868, args=0x8063f60,
+exc=0x0) at object.c:1042
+#8  0x4008f0f3 in mono_runtime_run_main (method=0x80b7868, argc=0,
+argv=0xbfffdbbc, exc=0x0) at object.c:910
+#9  0x400649af in mono_jit_exec (domain=0x805ef80, assembly=0x80b1bb0,
+argc=1, argv=0xbfffdbb8)
+    at driver.c:432
+#10 0x40064a71 in main_thread_handler (user_data=0xbfffdb20) at driver.c:459
+#11 0x400a976f in start_wrapper (data=0x80f2d90) at threads.c:198
+#12 0x400e246c in timed_thread_start_routine (args=0x80f2da8) at
+timed-thread.c:115
+#13 0x40144687 in GC_start_routine (arg=0x805b620) at linux_threads.c:1663
+#14 0x4021a332 in start_thread () from /lib/tls/libpthread.so.0
+
+Thread 7 (Thread 1093999920 (LWP 393)):
+#0  0xffffe002 in ?? ()
+#1  0x400d52f3 in EnterCriticalSection (section=0x805ef84) at
+critical-sections.c:138
+#2  0x4008de66 in mono_class_vtable (domain=0x805ef80, class=0x8266cd8) at
+object.c:355
+#3  0x400435f9 in mono_jit_compile_method (method=0x8266c88) at mini.c:6763
+#4  0x4008d98a in mono_compile_method (method=0x8266c88) at object.c:172
+#5  0x4007e8f8 in x86_magic_trampoline (eax=135051192, ecx=136669529,
+edx=136735880, esi=136523584, 
+    edi=136523584, ebx=135051192, code=0x825697f "\213ØShX", m=0x8266c88)
+at tramp-x86.c:88
+#6  0x080924bd in ?? ()
+#7  0x0825684b in ?? ()
+#8  0x082567c9 in ?? ()
+#9  0x08255b65 in ?? ()
+#10 0x0816afdd in ?? ()
+#11 0x080e534a in ?? ()
+#12 0x080e4d4d in ?? ()
+#13 0x080e5680 in ?? ()
+#14 0x4004365b in mono_jit_runtime_invoke (method=0x80f4b50, obj=0x8069ed0,
+params=0x413517c8, exc=0x8068ea0)
+    at mini.c:6782
+#15 0x4008e956 in mono_runtime_invoke (method=0x80f4b50, obj=0x8069ed0,
+params=0x413517c8, exc=0x8068ea0)
+    at object.c:684
+#16 0x4008f734 in mono_runtime_invoke_array (method=0x80f4b50,
+obj=0x8069ed0, params=0x8063f30, exc=0x8068ea0)
+    at object.c:1124
+#17 0x400910ce in mono_message_invoke (target=0x8069ed0, msg=0x8068e80,
+exc=0x8068ea0, out_args=0x805b2f8)
+    at object.c:2165
+#18 0x400aabfc in mono_async_invoke (ares=0x80caf78) at threadpool.c:50
+#19 0x400ab0b5 in async_invoke_thread () at threadpool.c:205
+#20 0x400a976f in start_wrapper (data=0x81169d0) at threads.c:198
+#21 0x400e246c in timed_thread_start_routine (args=0x81169e8) at
+timed-thread.c:115
+#22 0x40144687 in GC_start_routine (arg=0x805b240) at linux_threads.c:1663
+#23 0x4021a332 in start_thread () from /lib/tls/libpthread.so.0
+
+Thread 6 (Thread 1096101168 (LWP 394)):
+#0  0xffffe002 in ?? ()
+
+Thread 5 (Thread 1098202416 (LWP 395)):
+#0  0xffffe002 in ?? ()
+#1  0x400d52f3 in EnterCriticalSection (section=0x40134444) at
+critical-sections.c:138
+#2  0x4007e8ea in x86_magic_trampoline (eax=136464256, ecx=1075136536,
+edx=136746168, esi=134643776, 
+    edi=134643776, ebx=1075000892, code=0x82576c9
+"\203Ä\f\213Eô\211Eð¸\0349\006\b\213Mð\211\bÉÃ", 
+    m=0x82694b8) at tramp-x86.c:87
+#3  0x080924bd in ?? ()
+#4  0x0825761c in ?? ()
+#5  0x4004365b in mono_jit_runtime_invoke (method=0x8266be8, obj=0x0,
+params=0x0, exc=0x4175366c)
+    at mini.c:6782
+#6  0x4008e956 in mono_runtime_invoke (method=0x8266be8, obj=0x0,
+params=0x0, exc=0x4175366c) at object.c:684
+#7  0x4008d775 in mono_runtime_class_init (vtable=0x824e284) at object.c:102
+#8  0x0825692b in ?? ()
+#9  0x0825684b in ?? ()
+#10 0x082567c9 in ?? ()
+#11 0x08255b65 in ?? ()
+#12 0x0816afdd in ?? ()
+#13 0x080e534a in ?? ()
+#14 0x080e4d4d in ?? ()
+#15 0x080e5680 in ?? ()
+#16 0x4004365b in mono_jit_runtime_invoke (method=0x80f4b50, obj=0x8069c30,
+params=0x417537c8, exc=0x8068d20)
+    at mini.c:6782
+#17 0x4008e956 in mono_runtime_invoke (method=0x80f4b50, obj=0x8069c30,
+params=0x417537c8, exc=0x8068d20)
+    at object.c:684
+#18 0x4008f734 in mono_runtime_invoke_array (method=0x80f4b50,
+obj=0x8069c30, params=0x8063df8, exc=0x8068d20)
+    at object.c:1124
+#19 0x400910ce in mono_message_invoke (target=0x8069c30, msg=0x8068d00,
+exc=0x8068d20, out_args=0x80d2df8)
+    at object.c:2165
+#20 0x400aabfc in mono_async_invoke (ares=0x80cad70) at threadpool.c:50
+#21 0x400ab0b5 in async_invoke_thread () at threadpool.c:205
+#22 0x400a976f in start_wrapper (data=0x8160cb8) at threads.c:198
+#23 0x400e246c in timed_thread_start_routine (args=0x8140c48) at
+timed-thread.c:115
+#24 0x40144687 in GC_start_routine (arg=0x80d2d80) at linux_threads.c:1663
+#25 0x4021a332 in start_thread () from /lib/tls/libpthread.so.0
+
+Thread 4 (Thread 1100303664 (LWP 396)):
+#0  0xffffe002 in ?? ()
+#1  0x400d52f3 in EnterCriticalSection (section=0x40134444) at
+critical-sections.c:138
+#2  0x4002e0b9 in mono_ldftn (method=0x80f4b50) at jit-icalls.c:20
+#3  0x080e5672 in ?? ()
+#4  0x4004365b in mono_jit_runtime_invoke (method=0x80f4b50, obj=0x8069c00,
+params=0x419547c8, exc=0x8068ca0)
+    at mini.c:6782
+#5  0x4008e956 in mono_runtime_invoke (method=0x80f4b50, obj=0x8069c00,
+params=0x419547c8, exc=0x8068ca0)
+    at object.c:684
+#6  0x4008f734 in mono_runtime_invoke_array (method=0x80f4b50,
+obj=0x8069c00, params=0x8063db0, exc=0x8068ca0)
+    at object.c:1124
+#7  0x400910ce in mono_message_invoke (target=0x8069c00, msg=0x8068c80,
+exc=0x8068ca0, out_args=0x80d2d98)
+    at object.c:2165
+#8  0x400aabfc in mono_async_invoke (ares=0x80cabe0) at threadpool.c:50
+#9  0x400ab0b5 in async_invoke_thread () at threadpool.c:205
+#10 0x400a976f in start_wrapper (data=0x81a1988) at threads.c:198
+#11 0x400e246c in timed_thread_start_routine (args=0x81a1b20) at
+timed-thread.c:115
+#12 0x40144687 in GC_start_routine (arg=0x80d29e0) at linux_threads.c:1663
+#13 0x4021a332 in start_thread () from /lib/tls/libpthread.so.0
+
+Thread 3 (Thread 1102404912 (LWP 397)):
+#0  0xffffe002 in ?? ()
+#1  0x400d52f3 in EnterCriticalSection (section=0x40134444) at
+critical-sections.c:138
+#2  0x4002e0b9 in mono_ldftn (method=0x813a160) at jit-icalls.c:20
+#3  0x0816ad03 in ?? ()
+#4  0x0816abbc in ?? ()
+#5  0x08169d87 in ?? ()
+#6  0x08169bdc in ?? ()
+#7  0x08169b2a in ?? ()
+#8  0x080e56ef in ?? ()
+#9  0x080e533d in ?? ()
+#10 0x080e4d4d in ?? ()
+#11 0x080e5680 in ?? ()
+#12 0x4004365b in mono_jit_runtime_invoke (method=0x80f4b50, obj=0x80693f0,
+params=0x41b557c8, exc=0x8068160)
+    at mini.c:6782
+#13 0x4008e956 in mono_runtime_invoke (method=0x80f4b50, obj=0x80693f0,
+params=0x41b557c8, exc=0x8068160)
+    at object.c:684
+#14 0x4008f734 in mono_runtime_invoke_array (method=0x80f4b50,
+obj=0x80693f0, params=0x80639c0, exc=0x8068160)
+    at object.c:1124
+#15 0x400910ce in mono_message_invoke (target=0x80693f0, msg=0x8068140,
+exc=0x8068160, out_args=0x805b818)
+    at object.c:2165
+#16 0x400aabfc in mono_async_invoke (ares=0x80ca640) at threadpool.c:50
+#17 0x400ab0b5 in async_invoke_thread () at threadpool.c:205
+---Type <return> to continue, or q <return> to quit---
+#18 0x400a976f in start_wrapper (data=0x8242e78) at threads.c:198
+#19 0x400e246c in timed_thread_start_routine (args=0x8243328) at
+timed-thread.c:115
+#20 0x40144687 in GC_start_routine (arg=0x805b7a0) at linux_threads.c:1663
+#21 0x4021a332 in start_thread () from /lib/tls/libpthread.so.0
+
+Thread 2 (Thread 1104506160 (LWP 398)):
+#0  0xffffe002 in ?? ()
+#1  0x400d52f3 in EnterCriticalSection (section=0x40134444) at
+critical-sections.c:138
+#2  0x4002e0b9 in mono_ldftn (method=0x80f4b50) at jit-icalls.c:20
+#3  0x080e5672 in ?? ()
+#4  0x4004365b in mono_jit_runtime_invoke (method=0x80f4b50, obj=0x80693c0,
+params=0x41d567c8, exc=0x80680e0)
+    at mini.c:6782
+#5  0x4008e956 in mono_runtime_invoke (method=0x80f4b50, obj=0x80693c0,
+params=0x41d567c8, exc=0x80680e0)
+    at object.c:684
+#6  0x4008f734 in mono_runtime_invoke_array (method=0x80f4b50,
+obj=0x80693c0, params=0x8063978, exc=0x80680e0)
+    at object.c:1124
+#7  0x400910ce in mono_message_invoke (target=0x80693c0, msg=0x80680c0,
+exc=0x80680e0, out_args=0x805b7b8)
+    at object.c:2165
+#8  0x400aabfc in mono_async_invoke (ares=0x80ca618) at threadpool.c:50
+#9  0x400ab0b5 in async_invoke_thread () at threadpool.c:205
+#10 0x400a976f in start_wrapper (data=0x8242e78) at threads.c:198
+#11 0x400e246c in timed_thread_start_routine (args=0x8243470) at
+timed-thread.c:115
+#12 0x40144687 in GC_start_routine (arg=0x805b740) at linux_threads.c:1663
+#13 0x4021a332 in start_thread () from /lib/tls/libpthread.so.0
+
+Thread 1 (Thread 1076064480 (LWP 389)):
+#0  0xffffe002 in ?? ()
+#0  0xffffe002 in ?? ()
+(gdb) 
+(gdb) p/x 1098202416
+$4 = 0x41753d30
+(gdb) Quit
+(gdb) thread 7
+[Switching to thread 7 (Thread 1093999920 (LWP 393))]#0  0xffffe002 in ?? ()
+(gdb) up
+#1  0x400d52f3 in EnterCriticalSection (section=0x805ef84) at
+critical-sections.c:138
+138		mono_mutex_lock(&section->mutex);
+(gdb) 
+#2  0x4008de66 in mono_class_vtable (domain=0x805ef80, class=0x8266cd8) at
+object.c:355
+355		mono_domain_lock (domain);
+(gdb) 
+#3  0x400435f9 in mono_jit_compile_method (method=0x8266c88) at mini.c:6763
+6763		mono_runtime_class_init (mono_class_vtable (target_domain,
+method->klass));
+(gdb) 
+#4  0x4008d98a in mono_compile_method (method=0x8266c88) at object.c:172
+172		return default_mono_compile_method (method);
+(gdb) 
+#5  0x4007e8f8 in x86_magic_trampoline (eax=135051192, ecx=136669529,
+edx=136735880, esi=136523584, 
+    edi=136523584, ebx=135051192, code=0x825697f "\213ØShX", m=0x8266c88)
+at tramp-x86.c:88
+88		addr = mono_compile_method (m);
+(gdb) list -
+78	static gpointer
+79	x86_magic_trampoline (int eax, int ecx, int edx, int esi, int edi, 
+80			      int ebx, guint8 *code, MonoMethod *m)
+81	{
+82		guint8 reg;
+83		gint32 disp;
+84		char *o;
+85		gpointer addr;
+86	
+87		EnterCriticalSection (metadata_section);
+(gdb) list
+#0  0xffffe002 in ?? ()
+#0  0xffffe002 in ?? ()
+(gdb) 
+(gdb) p/x 1098202416
+$4 = 0x41753d30
+(gdb) Quit
+(gdb) thread 7
+[Switching to thread 7 (Thread 1093999920 (LWP 393))]#0  0xffffe002 in ?? ()
+(gdb) up
+#1  0x400d52f3 in EnterCriticalSection (section=0x805ef84) at
+critical-sections.c:138
+138		mono_mutex_lock(&section->mutex);
+(gdb) 
+#2  0x4008de66 in mono_class_vtable (domain=0x805ef80, class=0x8266cd8) at
+object.c:355
+355		mono_domain_lock (domain);
+(gdb) 
+#3  0x400435f9 in mono_jit_compile_method (method=0x8266c88) at mini.c:6763
+6763		mono_runtime_class_init (mono_class_vtable (target_domain,
+method->klass));
+(gdb) 
+#4  0x4008d98a in mono_compile_method (method=0x8266c88) at object.c:172
+172		return default_mono_compile_method (method);
+(gdb) 
+#5  0x4007e8f8 in x86_magic_trampoline (eax=135051192, ecx=136669529,
+edx=136735880, esi=136523584, 
+    edi=136523584, ebx=135051192, code=0x825697f "\213ØShX", m=0x8266c88)
+at tramp-x86.c:88
+88		addr = mono_compile_method (m);
+(gdb) list -
+78	static gpointer
+79	x86_magic_trampoline (int eax, int ecx, int edx, int esi, int edi, 
+80			      int ebx, guint8 *code, MonoMethod *m)
+81	{
+82		guint8 reg;
+83		gint32 disp;
+84		char *o;
+85		gpointer addr;
+86	
+87		EnterCriticalSection (metadata_section);
+(gdb) list