Jonathan,
Another info: I just tested with an older Samsung Galaxy S that has only
one core and couldn't reproduce any deadlocks even with 10 background
threads whereas with the dual core Galaxy Tab 10.1 it is really easy to
reproduce.
-- Henon

Dipl. Ing. Meinrad Recheis
eqqon GmbH
Friedmanngasse 32/20
1160 Wien, Ă–sterreich
Tel.: +43 (0) 680-31-800-37
Fax: +43 (0) 1-25-330-339-356
meinrad.rech...@eqqon.com

Firma: eqqon GmbH
Rechtsform: Gesellschaft mit beschränkter Haftung
Firmensitz: Wien
Firmenbuchnummer: FN 327919 i
Firmenbuchgericht: Handelsgericht Wien

--
eqqon Disclaimer / Legal notice: http://www.eqqon.com/index.php/Disclaimer 


On 16.07.2012 13:03, Meinrad Recheis wrote:
> Hi Jonathan,
> Thanks for your help!
>
> On 13.07.2012 17:39, Jonathan Pryor wrote:
>> On Jul 12, 2012, at 10:51 AM, henon wrote:
>>> The problem is, that I am experiencing non-deterministic hangups. When 
>>> hanging I pause the debugger and I always see that the executing thread 
>>> (mostly my code on the GUI thread) hangs in some random method
>> Which Mono for Android version? (Have you tried the 4.2.4 beta?)
> I use the latest update that has been automatically downloaded by
> MonoDevelop on Windows. I searched around but I don't find a download
> link for 4.2.4 beta. How do you get the beta version? How to find out
> the Version of Mono4Android? Monodevelop says the version of MFA is
> 3.0.3 but I don't believe it ;)
>> Does it have non-deterministic hangups if you don't have the debugger 
>> attached?
> Yes, definitely. 
>>> The stacktrace of the hanging thread always looks like this 
>>>
>>> System.Threading.Monitor.TryEnter ...
>>> System.Threading.Monitor.Enter ...
>>> Java.Lang.Object.GetObject ...
>>> Java.Lang.Object._GetObject
>>> Java.Lang.Object.GetObject ...
>>> ...
>> You have any methods beyond that?
> Stacktraces:
>
> Normal case, GuiThread in Deadlock:
>
>
> System.Threading.Monitor.TryEnter (obj=, millisecondsTimeout=,
> lockTaken=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/mono/mcs/class/corlib/System.Threading/Monitor.cs:224
> System.Threading.Monitor.Enter (Parameters=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/mono/mcs/class/corlib/System.Threading/Monitor.cs:198
> Java.Interop.TypeManager.CreateInstance (Parameters=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Java.Interop/TypeManager.cs:172
> Java.Lang.Object.GetObject (Parameters=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Java.Lang/Object.cs:226
> Android.Runtime.AndroidEnvironment.GetLastThrowable (Parameters=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Runtime/AndroidEnvironment.cs:57
> Android.Runtime.JNIEnv.FindClass (Parameters=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.cs:258
> Android.Runtime.JNIEnv.CreateInstance (Parameters=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.cs:203
> Java.Lang.Thread.RunnableImplementor..ctor (Parameters=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Java.Lang/Thread.cs
> Java.Lang.Thread.RunnableImplementor..ctor (Parameters=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Java.Lang/Thread.cs
> Android.App.Activity.RunOnUiThread (Parameters=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Android.App/Activity.cs:23
> DeadlockRepro.Activity1.ThreadBody (Parameters=) in
> c:\Projects\DeadlockRepro\DeadlockRepro\Activity1.cs:40
> System.Threading.Thread.StartInternal (Parameters=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/mono/mcs/class/corlib/System.Threading/Thread.cs:708
>
>
> I even managed to reproduce a deadlock where the finalizer Thread is
> involved. All 3 of 4 threads were hanging in TryEnter:
>
> First Thread:
> System.Threading.Monitor.TryEnter (obj=, millisecondsTimeout=,
> lockTaken=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/mono/mcs/class/corlib/System.Threading/Monitor.cs:224
> System.Threading.Monitor.Enter (obj=The vm is not suspended.,
> lockTaken=false) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/mono/mcs/class/corlib/System.Threading/Monitor.cs:198
> Java.Lang.Object.GetObject (handle=0x4143e5c8, transfer=, type=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Java.Lang/Object.cs:215
> Java.Lang.Object._GetObject (Parameters=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Java.Lang/Object.cs:207
> Java.Lang.Object.GetObject (Parameters=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Java.Lang/Object.cs:199
> Java.Lang.IRunnableInvoker.n_Run (Parameters=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/platforms/android-8/src/generated/Java.Lang.IRunnable.cs:68
> object.96985076-ae7e-4301-b924-2b58374646b7 (Parameters=) in
>
> Second Thread:
> System.Threading.Monitor.TryEnter (obj=, millisecondsTimeout=,
> lockTaken=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/mono/mcs/class/corlib/System.Threading/Monitor.cs:224
> System.Threading.Monitor.Enter (obj=The vm is not suspended.,
> lockTaken=false) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/mono/mcs/class/corlib/System.Threading/Monitor.cs:198
> Java.Lang.Object.RegisterInstance (instance=The vm is not suspended.,
> value=0x41376938, transfer=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Java.Lang/Object.cs:153
> Java.Lang.Throwable.SetHandle (value=, transfer=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Java.Lang/Throwable.cs:53
> Java.Lang.Throwable..ctor (handle=, transfer=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Java.Lang/Throwable.cs:22
> Java.Lang.Error..ctor (javaReference=, transfer=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/platforms/android-8/src/generated/Java.Lang.Error.cs
> Java.Lang.LinkageError..ctor (javaReference=, transfer=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/platforms/android-8/src/generated/Java.Lang.LinkageError.cs
> Java.Lang.NoClassDefFoundError..ctor (javaReference=, transfer=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/platforms/android-8/src/generated/Java.Lang.NoClassDefFoundError.cs
>
> Third Thread (GUI Thread ?)
> Android.Runtime.JNIEnv.LogCreateLocalRef (jobject=0x0) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.cs:391
> Android.Runtime.JNIEnv.FindClass
> (classname="mono/java/lang/RunnableImplementor") in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.cs:256
> Android.Runtime.JNIEnv.CreateInstance
> (jniClassName="mono/java/lang/RunnableImplementor", signature="()V",
> constructorParameters={Android.Runtime.JValue[0]}) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Runtime/JNIEnv.cs:203
> Java.Lang.Thread.RunnableImplementor..ctor (handler={System.Action},
> removable=false) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Java.Lang/Thread.cs
> Java.Lang.Thread.RunnableImplementor..ctor (handler={System.Action}) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Java.Lang/Thread.cs
> Android.App.Activity.RunOnUiThread (action={System.Action}) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Android.App/Activity.cs:23
> DeadlockRepro.Activity1.ThreadBody () in
> c:\Projects\DeadlockRepro\DeadlockRepro\Activity1.cs:40
> System.Threading.Thread.StartInternal () in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/mono/mcs/class/corlib/System.Threading/Thread.cs:708
>
>
> Finalizer Thread
> System.Threading.Monitor.TryEnter (obj=, millisecondsTimeout=,
> lockTaken=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/mono/mcs/class/corlib/System.Threading/Monitor.cs:224
> System.Threading.Monitor.Enter (obj=, lockTaken=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/mono/mcs/class/corlib/System.Threading/Monitor.cs:198
> Java.Lang.Object.DeregisterInstance (Parameters=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Java.Lang/Object.cs:171
> Java.Lang.Object.Dispose (Parameters=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Java.Lang/Object.cs:118
> Java.Lang.Throwable.Finalize (Parameters=) in
> /Users/builder/data/lanes/monodroid-mac-monodroid-4.2.3-branch/410a5aba/source/monodroid/src/Mono.Android/src/Java.Lang/Throwable.cs:95
>
>
>
>
> Below is a very simple Mono4Android activity that reproduces the
> deadlock very likely (the stacktraces above are actually taken from it).
>
>
> Create a new Mono4AndroidProject with below code for Activity1. Nothing
> else is needed. I was able to reproduce the deadlock on my GalaxyTab
> 10.1 very easily even on first run.
>
>
>
> using System;
>
> using Android.App;
> using Android.Content;
> using Android.Runtime;
> using Android.Views;
> using Android.Widget;
> using Android.OS;
> using System.Threading;
>
> namespace DeadlockRepro
> {
>     [Activity (Label = "DeadlockRepro", MainLauncher = true)]
>     public class Activity1 : Activity
>     {
>         int count = 1;
>         bool m_stop=false;
>
>         Thread m_background_worker;
>
>         protected override void OnCreate (Bundle bundle)
>         {
>             base.OnCreate (bundle);
>
>             // Set our view from the "main" layout resource
>             SetContentView (Resource.Layout.Main);
>
>             // Get our button from the layout resource,
>             // and attach an event to it
>             //Button button = FindViewById<Button> (Resource.Id.myButton);
>            
>             m_background_worker=new Thread(ThreadBody);
>             m_background_worker.Start();
>         }
>
>         private void ThreadBody() {
>             while(!m_stop) {
>                 Thread.Sleep(100);
>                 count++;
>                 RunOnUiThread(GuiUpdate);
>             }
>         }
>
>         private void GuiUpdate() {
>             var button=FindViewById<Button> (Resource.Id.myButton);
>             button.Text=string.Format("Background thread cycles: {0}",
> count);
>         }
>     }
> }
>
> If it does not deadlock at the first run, please run it a few times and
> leave it running for a minute or so. It usually hangs within seconds
> after starting and it happens even when detached from the debugger.
> Hope this gets you on the right track. If you need anything else, let me
> know. Please also let me know if you were able to reproduce the behavior.
> Thanks,
> -- Henon
>> Thanks,
>>  - Jon
>>
>> _______________________________________________
>> Monodroid mailing list
>> Monodroid@lists.ximian.com
>>
>> UNSUBSCRIBE INFORMATION:
>> http://lists.ximian.com/mailman/listinfo/monodroid
>>
> _______________________________________________
> Monodroid mailing list
> Monodroid@lists.ximian.com
>
> UNSUBSCRIBE INFORMATION:
> http://lists.ximian.com/mailman/listinfo/monodroid
>
_______________________________________________
Monodroid mailing list
Monodroid@lists.ximian.com

UNSUBSCRIBE INFORMATION:
http://lists.ximian.com/mailman/listinfo/monodroid

Reply via email to