[Mono-list] GC hang

Gregory Junker gjunker at dayark.com
Wed Dec 21 02:07:32 EST 2011


The only reference I have seen to anything similar to what I am seeing, was
in a Bugzilla from 2005, so I wanted to ask here to find out if anyone else
is seeing this.

On RHEL6 and CentOS6, when I try to run Mono 2.10.x, regardless where it was
built, I get a non-deterministic hang in the GC. Attaching with GDB shows:

(gdb) where
#0  0x0000003cdbc0c670 in pthread_kill () from /lib64/libpthread.so.0
#1  0x00000000005d7d53 in GC_suspend_all () at pthread_stop_world.c:383
#2  0x00000000005d7db9 in pthread_stop_world () at pthread_stop_world.c:418
#3  0x00000000005d7f64 in GC_stop_world () at pthread_stop_world.c:603
#4  0x00000000005d8b97 in GC_stopped_mark (stop_func=0x5d82af
<GC_never_stop_func>) at alloc.c:503
#5  0x00000000005d88fe in GC_try_to_collect_inner (stop_func=0x5d82af
<GC_never_stop_func>) at alloc.c:382
#6  0x00000000005d9988 in GC_collect_or_expand (needed_blocks=1,
ignore_off_page=0) at alloc.c:1045
#7  0x00000000005d9c08 in GC_allocobj (sz=3, kind=0) at alloc.c:1125
#8  0x00000000005d0939 in GC_generic_malloc_inner (lb=24, k=0) at
#9  0x00000000005f2476 in GC_generic_malloc_many (lb=24, k=0,
result=0x8f2498) at mallocx.c:513
#10 0x00000000005dada9 in GC_local_malloc_atomic (bytes=24) at
#11 0x0000000000565865 in mono_object_new_ptrfree (vtable=0x113e588) at
#12 0x0000000000565ab5 in mono_object_new_alloc_specific (vtable=0x113e588)
at object.c:4326
#13 0x0000000000566318 in mono_object_new_specific (vtable=0x113e588) at
#14 0x0000000040a3a07a in ?? ()
#15 0x00000000010846e0 in ?? ()
#16 0x00007f33e7103a00 in ?? ()
#17 0x00007f33e7104000 in ?? ()
#18 0x00007f33e718f000 in ?? ()
#19 0x000000000111aa70 in ?? ()
#20 0x00007fffd36f1060 in ?? ()
#21 0x00007fffd36f0fa0 in ?? ()
#22 0x0000000000000000 in ?? ()
(gdb) up 1
#1  0x00000000005d7d53 in GC_suspend_all () at pthread_stop_world.c:383
383             result = pthread_kill(p -> id, SIG_SUSPEND);
(gdb) list
378                 #if DEBUG_THREADS
379                   GC_printf1("Sending suspend signal to 0x%lx\n", p ->
380                 #endif
382     #ifndef PLATFORM_ANDROID
383             result = pthread_kill(p -> id, SIG_SUSPEND);
384     #else
385             result = android_thread_kill(p -> kernel_id, SIG_SUSPEND);
386     #endif
387                 switch(result) {

I get these hangs anytime, including during "make install" when it's running
anything that uses a .Net executable (generating docs, gacutil, etc). 

Is this a known issue with RHEL6 pthreads implementation, and if so, is
there a simple workaround (i.e. disabling whatever combinations of GC
configuration are needed)? I'm not sure why RHEL would be different than,
say, Ubuntu (which works fine), since it's supposed to be "just pthreads",
but clearly something is borked on RHEL6.


More information about the Mono-list mailing list