java.interop icon indicating copy to clipboard operation
java.interop copied to clipboard

Native crash running Java.Interop.Export-Tests.dll tests

Open jpobst opened this issue 6 years ago • 1 comments

When CI is running bin/TestDebug/Java.Interop.Export-Tests.dll on Mac, there's about a 25% chance it fails with this native crash:

  * Assertion: should not be reached at class-accessors.c:81
  
  
  =================================================================
  	Native Crash Reporting
  =================================================================
  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.
  =================================================================
  
  =================================================================
  	Native stacktrace:
  =================================================================
  	0x102d2091b - /Library/Frameworks/Mono.framework/Versions/Current/Commands/mono : mono_dump_native_crash_info
  	0x102cb97b5 - /Library/Frameworks/Mono.framework/Versions/Current/Commands/mono : mono_handle_native_crash
  	0x102d1fe71 - /Library/Frameworks/Mono.framework/Versions/Current/Commands/mono : sigabrt_signal_handler
  	0x7fff79156b5d - /usr/lib/system/libsystem_platform.dylib : _sigtramp
  	0x10a126f87 - Unknown
  	0x7fff790106a6 - /usr/lib/system/libsystem_c.dylib : abort
  	0x102f28837 - /Library/Frameworks/Mono.framework/Versions/Current/Commands/mono : monoeg_assert_abort
  	0x102f09a9f - /Library/Frameworks/Mono.framework/Versions/Current/Commands/mono : mono_log_write_logfile
  	0x102f28bbe - /Library/Frameworks/Mono.framework/Versions/Current/Commands/mono : monoeg_g_logv_nofree
  	0x102f28d3f - /Library/Frameworks/Mono.framework/Versions/Current/Commands/mono : monoeg_assertion_message
  	0x102db6ee5 - /Library/Frameworks/Mono.framework/Versions/Current/Commands/mono : mono_class_get_flags
  	0x102dac83b - /Library/Frameworks/Mono.framework/Versions/Current/Commands/mono : mono_class_setup_fields
  	0x102dacdc1 - /Library/Frameworks/Mono.framework/Versions/Current/Commands/mono : mono_class_init_internal
  	0x102da7e7f - /Library/Frameworks/Mono.framework/Versions/Current/Commands/mono : mono_class_is_subclass_of_internal
  	0x102e2e4f3 - /Library/Frameworks/Mono.framework/Versions/Current/Commands/mono : mono_class_is_subclass_of
  	0x106bf1348 - /Users/runner/runners/2.160.0/work/1/s/bin/TestDebug/libjava-interop.dylib : _ZL19get_gc_bridge_indexP19JavaInteropGCBridgeP10_MonoClass
  	0x106bf0a4c - /Users/runner/runners/2.160.0/work/1/s/bin/TestDebug/libjava-interop.dylib : _ZL20gc_bridge_class_kindP10_MonoClass
  SIGQUIT: [libjvm.dylib+0x49bf1d], sa_mask[0]=11111111011111110111111111111111, sa_flags=SA_RESTART|SA_SIGINFO
    Start time: 2019-11-04 19:57:01Z
      End time: 2019-11-04 19:57:02Z
      Duration: 1.803 seconds

Some examples:

  • https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=3212341
  • https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=3202439
  • https://devdiv.visualstudio.com/DevDiv/_build/results?buildId=3201283

jpobst avatar Nov 04 '19 20:11 jpobst

Related: https://github.com/mono/mono/issues/14190

The crash appears to happen because we're trying to do a GC during process shutdown.

Possible WorkAround: Don't Do That™. If we could tell if mono were shutting down the process, we could skip the entire GC infrastructure -- not GC'ing -- during process shutdown, thus avoiding the crash.

The question is, How do we tell if the process is shutting down. Looks like the only public mechanism is to use the "profiler", with the MonoProfilerRuntimeShutdownCallback event.

Looks like there should be a mono_profiler_set_runtime_shutdown_callback() function...?

jonpryor avatar Nov 04 '19 21:11 jonpryor