[Mono-dev] mono-3.2.1 "make check" failures & sgen assertion

Charles Randall Charles.Randall at nirvanix.com
Thu Aug 8 22:53:37 UTC 2013


Mono developers,

While trying to track down a mono internal problem related to signals and garbage collection, I've been doing some testing with the latest 3.2.1 release.

In an attempt to find a test case that's most interesting to this team, I'm running OpenSuse 12.3 and repeatedly unpacking 3.2.1, running "configure", "make", and "make check". I let this run for ~24 hours which resulted in 58 builds/checks. Every one failed one test or another in "make check". This is in stark contrast to the status reported by monkey wrench for "mono-dist-3.2.1-release" on OpenSuse (all green).

I'm new to OpenSuse, but I just did a fresh install and "zypper -n in -t pattern devel_C_C++" to get a development environment. Other than that, I'm just running the Makefile appended below over and over again.

My system is,

# cat /etc/SuSE-release
openSUSE 12.3 (x86_64)
VERSION = 12.3
CODENAME = Dartmouth
# uname -a
Linux linux-mono.nirvanix.com 3.7.10-1.1-desktop #1 SMP PREEMPT Thu Feb 28 15:06:29 UTC 2013 (82d3f21) x86_64 x86_64 x86_64 GNU/Linux

The mono I end up with is,

# mono --version
Mono JIT compiler version 3.2.1 (tarball Tue Aug  6 14:43:27 MDT 2013) Copyright (C) 2002-2012 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
        TLS:           __thread
        SIGSEGV:       altstack
        Notifications: epoll
        Architecture:  amd64
        Disabled:      none
        Misc:          softdebug
        LLVM:          supported, not enabled.
        GC:            sgen

Here's a count of the failures from those runs,

     25 bug-10127.exe
     13 gsharing-valuetype-layout.exe
      4 sgen-weakref-stress.exe|ms-par
      3 sgen-weakref-stress.exe|ms-split
      3 sgen-weakref-stress.exe|ms-conc
      2 sgen-weakref-stress.exe|plain
      2 delegate2.exe
      1 sgen-weakref-stress.exe|ms-split-95
      1 sgen-weakref-stress.exe|ms-conc-split
      1 sgen-bridge.exe|ms-split
      1 appdomain-unload.exe

Note that the total number of test failures is greater than the 58 iterations because sometimes more than one test failed per iteration. I didn't dig into the failures, but note that bug-10127.exe fails on 43% of the runs (25/58).

I'm most interested in assertion failures in the bug-10127.exe failures as they look similar to my application failures on another platform. Specifically, here's a manual recompile and run of that test (it doesn't fail every time),

# mcs bug-10127.cs
# mono bug-10127.exe
Starting cache testers
* Assertion at sgen-os-posix.c:60, condition `info->doing_handshake' not met ...
=================================================================
Got a SIGABRT while executing native code. This usually indicates a fatal error in the mono runtime or one of the native libraries used by your application.
=================================================================

Here are a few examples of the bug-10127.exe failure stack traces from manual runs as described above,

http://sprunge.us/iHFX
http://sprunge.us/cOEU
http://sprunge.us/VKRg

For completeness, the only thing that I can think of that may be different about my very simple configuration is that my OpenSuse system is a virtual machine (4 core, 4 GB RAM) running on VMware ESXi. I suspect that this is subtly altering the timing of execution and exposing latent bugs.

These appears to be related,

https://github.com/mono/mono/pull/720

http://stackoverflow.com/questions/17937222/mono-3-2-0-process-crashes-on-sgen-os-posix-info-handshake-not-met

>From what I've described, am I doing anything wrong? Anyone else seeing something similar?

-Charles

--- snip ---
MONO_VER=3.2.1
MONO_DIST=mono-${MONO_VER}.tar.bz2
MONO_DIR=mono-${MONO_VER}

all: check.done

extract.done:
        @echo ------------------------------------------------------------
        @echo EXTRACT
        @echo ------------------------------------------------------------
        tar jxvf ${MONO_DIST} 2>&1
        touch extract.done

configure.done: extract.done
        @echo ------------------------------------------------------------
        @echo CONFIGURE
        @echo ------------------------------------------------------------
        (cd ${MONO_DIR} && ./configure --prefix=/tmp/mono) 2>&1
        touch configure.done

build.done: configure.done
        @echo ------------------------------------------------------------
        @echo BUILD
        @echo ------------------------------------------------------------
        make -C ${MONO_DIR} -j 4 2>&1
        touch build.done

check.done: build.done
        @echo ------------------------------------------------------------
        @echo CHECK
        @echo ------------------------------------------------------------
        make -C ${MONO_DIR} check 2>&1
        touch check.done

.PHONY: clean
clean:
        @echo ------------------------------------------------------------
        @echo CLEAN
        @echo ------------------------------------------------------------
        -rm -f *.log *.done *~
        -rm -rf ${MONO_DIR}




More information about the Mono-devel-list mailing list