[Mono-bugs] [Bug 56599][Nor] Changed - mcs compile hangs

bugzilla-daemon@bugzilla.ximian.com bugzilla-daemon@bugzilla.ximian.com
Sat, 17 Apr 2004 03:36:06 -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 joshhelmer@cox.net.

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

--- shadow/56599	2004-04-17 02:04:10.000000000 -0400
+++ shadow/56599.tmp.11912	2004-04-17 03:36:06.000000000 -0400
@@ -550,6 +550,75 @@
 acquire the domain lock in mono_jit_info_table but that lock is  
 currently head by thread 7672 (thread 2).  
   
 I will keep looking into this for a while, but figured that I would  
 post it here so that the experts could look it over.  Who knows, may  
 be nothing, but it might be helpful.  Good luck!  
+
+------- Additional Comments From joshhelmer@cox.net  2004-04-17 03:36 -------
+Just a little more info before I give it up for the night.  I can 
+verify that trampoline_hash_mutex has been aquired in frame 10 of 
+thread 3, and the system is trying to get the domain lock in frame 9 
+of thread 3. 
+ 
+I can also see that the domain lock is already held in frame 10 of 
+thread 2, and that the system is trying to acquire 
+trampoline_hash_mutex in frame 9 of thread 2.  Text book deadlock 
+example... 
+ 
+I also found that my suspicions about the gdb output being off by 4 
+bytes seem to be correct.  When I print the domain object from 
+thread 2 I get: 
+ 
+(gdb) p *domain 
+$45 = { 
+  domain = 0x809ff80, 
+  lock = { 
+    depth = 0, 
+    mutex = { 
+      __data = { 
+        __lock = 2, 
+        __count = 1, 
+        __owner = 7672, 
+        __kind = 1, 
+        __nusers = 1 
+      }, 
+      __size = 
+"\002\000\000\000\001\000\000\000ø\035\000\000\001\000\000\000\001\000\000\000\000\000\000", 
+      __align = 2 
+    } 
+  }, 
+  mp = 0x8060620, 
+  code_mp = 0x8062628, 
+  env = 0x8090f80, 
+  assemblies = 0x8062638, 
+  entry_assembly = 0x8128eb0, 
+  setup = 0x809ffc0, 
+  friendly_name = 0x8063428 "mcs.exe", 
+  state = 0, 
+  ldstr_table = 0x8090f00, 
+  class_vtable_hash = 0x8090f60, 
+  proxy_vtable_hash = 0x8090f40, 
+  static_data_hash = 0x8090f20, 
+  jit_code_hash = 0x8062688, 
+  jit_info_table = 0x804f5d4, 
+  type_hash = 0x8090ea0, 
+  refobject_hash = 0x8090d20, 
+  domain_id = 1, 
+  search_path = 0x0, 
+  create_proxy_for_type_method = 0x0, 
+  private_invoke_method = 0x0, 
+  default_context = 0x80e5fc0, 
+  out_of_memory_ex = 0x80e6fc0, 
+  null_reference_ex = 0x80e6f90, 
+  stack_overflow_ex = 0x80e6f60, 
+  special_static_fields = 0x0, 
+  jump_target_hash = 0x0, 
+  class_init_trampoline_hash = 0x8090ee0, 
+  finalizable_objects_hash = 0x80626d8 
+} 
+ 
+which makes a lot more sense than the version I see in gdb's output 
+for thread 3.  The big mystery is to figure out where the domain 
+lock has been acquired in thread 2.  At that point at least I will 
+understand exactly what has to happen before the deadlock occurs, 
+then I might finally be able to find a fix...