Bug 18590 - SIGSEGV when throwing C# exceptions in a Java callback on main thread
Summary: SIGSEGV when throwing C# exceptions in a Java callback on main thread
Status: CONFIRMED
Alias: None
Product: Android
Classification: Xamarin
Component: Mono runtime / AOT Compiler (show other bugs)
Version: 4.12.0
Hardware: Macintosh Mac OS
: Normal normal
Target Milestone: ---
Assignee: Jonathan Pryor
URL:
Depends on:
Blocks:
 
Reported: 2014-03-26 11:05 UTC by kissling
Modified: 2014-09-09 23:32 UTC (History)
3 users (show)

Tags:
Is this bug a regression?: ---
Last known good build:

Notice (2018-05-24): bugzilla.xamarin.com is now in read-only mode.

Please join us on Visual Studio Developer Community and in the Xamarin and Mono organizations on GitHub to continue tracking issues. Bugzilla will remain available for reference in read-only mode. We will continue to work on open Bugzilla bugs, copy them to the new locations as needed for follow-up, and add the new items under Related Links.

Our sincere thanks to everyone who has contributed on this bug tracker over the years. Thanks also for your understanding as we make these adjustments and improvements for the future.


Please create a new report for Bug 18590 on Developer Community or GitHub if you have new information to add and do not yet see a matching new report.

If the latest results still closely match this report, you can use the original description:

  • Export the original title and description: Developer Community HTML or GitHub Markdown
  • Copy the title and description into the new report. Adjust them to be up-to-date if needed.
  • Add your new information.

In special cases on GitHub you might also want the comments: GitHub Markdown with public comments

Related Links:
Status:
CONFIRMED

Description kissling 2014-03-26 11:05:39 UTC
When throwing a C# exception while in a Java callback, a SIGSEGV may occur, crashing the app.
This mainly occurs on the main thread.

Steps to reproduce:
1. Create a new Android project
2. Paste in the following code to MainActivity.
3. Run in Release mode.
4. App logs exception, then crashes with SIGSEGV.

using System;
using System.Threading.Tasks;
using Android.App;
using Android.OS;
using Java.Util;

namespace AndroidNativeExceptionBug
{
    [Activity(MainLauncher = true)]
    public sealed class MainActivity : Activity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            try
            {
                // Synchronous call first logs exception, then segfaults.
                Test();

                // Works as expected. Doesn't crash the app.
                //Task.Run((Action)Test).Wait();
            }
            catch (Exception e)
            {
                Console.WriteLine("Successfully caught {0}.", e);
            }
        }

        private sealed class Comparator : Java.Lang.Object, IComparator
        {
            public int Compare(Java.Lang.Object object1, Java.Lang.Object object2)
            {
                throw new Exception();
            }
        }

        private void Test()
        {
            Arrays.Sort(new [] { Java.Lang.Boolean.False, Java.Lang.Boolean.True }, new Comparator()); 
        }
    }
}


Workarounds:
When the Java callback is run from a different thread via Task.Run, the app does not crash. Please uncomment the second test case in the supplied code (and comment the first one) to see the difference.



Version information:

=== Xamarin Studio ===

Version 4.2.3 (build 60)
Installation UUID: 938751df-f7a5-457d-b87b-379763e0ada1
Runtime:
	Mono 3.2.6 ((no/9b58377)
	GTK+ 2.24.23 theme: Raleigh
	GTK# (2.12.0.0)
	Package version: 302060000

=== Apple Developer Tools ===

Xcode 5.1 (5084)
Build 5B130a

=== Xamarin.iOS ===

Version: 7.2.0.2 (Business Edition)
Hash: 58c3efa
Branch: 
Build date: 2014-10-03 18:02:26-0400

=== Xamarin.Android ===

Version: 4.12.1 (Business Edition)
Android SDK: /Users/etankissling/Library/Developer/Xamarin/android-sdk-mac_x86
	Supported Android versions:
		4.3 (API level 18)
Java SDK: /usr
java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)

=== Xamarin.Mac ===

Xamarin.Mac: Not Installed

=== Build Information ===

Release ID: 402030060
Git revision: 30c4afc300c2a39ec5300851357ce02e49dd217e
Build date: 2014-03-05 22:09:33+0000
Xamarin addins: f8a9589b57c2bfab2ccd73c880e7ad81e3ecf044

=== Operating System ===

Mac OS X 10.9.2
Darwin etans-mbp 13.1.0 Darwin Kernel Version 13.1.0
    Thu Jan 16 19:40:37 PST 2014
    root:xnu-2422.90.20~2/RELEASE_X86_64 x86_64
Comment 1 Ram Chandra 2014-03-26 13:34:08 UTC
I tried to reproduce this issue with the steps provided in bug description and I am able to reproduce this issue.

I observed that when I call the Test() in "Release" mode an error occur and application is crashing  but when I uncomment Task.Run((Action)Test).wait()" it doesn't throw any error and application is deployed successfully.

Screencast: http://www.screencast.com/t/BzPi4KTKp


Environment Info:

Mac OS X 10.7.5
Xamarin Studio: 4.2.3 (build 60)
Xamarin.Android: 4.12.1
Comment 2 Jonathan Pryor 2014-03-27 10:50:02 UTC
@Ram: Please gist/attach the complete `adb logcat` output; trying to read truncated text from a screencast is not wonderful.

I suspect that this is a variation/fallout of Bug #7634.