jonathanpeppers
jonathanpeppers

Reputation: 26505

MonoTouch - LLVM compiled App Hangs in 5.3.x in System.Collections.Generic.Dictionary?

We are working on a game using MonoGame, which has been working fine with MonoTouch 5.2.x until updating to 5.3.x betas, even 5.3.5.

The game would just lock up when loading our first level, and would only happen when compiled in Release mode for the device. Works fine in the simulator or in Debug mode for the device.

We had no clue what the issue was, until we used a trick Rolf Kvinge posted here.

Here is the useful snippet of the crash log:

0   libsystem_c.dylib               0x32bd68b0 memset$VARIANT$CortexA9 + 152
1   DrawAStickmaniPhone             0x00492e40 DrawAStickmanCore_System_Collections_Generic_Dictionary_2_int_DrawAStickman_Core_Json_Frame_TryGetValue_int_DrawAStickman_Core_Json_Frame_ (DrawAStickmanCore.dll.7.s:36462)
2   DrawAStickmaniPhone             0x004d4e3c DrawAStickman_Core_FrameCounter_OnFrameChanged (DrawAStickmanCore.dll.7.s:137904)
3   DrawAStickmaniPhone             0x00479dbc DrawAStickmanCore_DrawAStickman_Core_BaseCounter_Update_Microsoft_Xna_Framework_GameTime (DrawAStickmanCore.dll.7.s:974)
4   DrawAStickmaniPhone             0x0048694c DrawAStickmanCore_DrawAStickman_Core_ElementStateComponent_Update_Microsoft_Xna_Framework_GameTime (DrawAStickmanCore.dll.7.s:17895)
5   DrawAStickmaniPhone             0x0047ce70 DrawAStickmanCore_DrawAStickman_Core_ElementComponent_Update_Microsoft_Xna_Framework_GameTime (DrawAStickmanCore.dll.7.s:5028)
6   DrawAStickmaniPhone             0x004d72cc DrawAStickman_Core_LevelComponent_Update_Microsoft_Xna_Framework_GameTime_0 (DrawAStickmanCore.dll.7.s:138769)
7   DrawAStickmaniPhone             0x0003d170 MonoGame_Framework_Microsoft_Xna_Framework_Game__UpdateActionm__2C_Microsoft_Xna_Framework_IUpdateable_Microsoft_Xna_Framework_GameTime (MonoGame.Framework.dll.7.s:69150)
8   DrawAStickmaniPhone             0x0003d284 MonoGame_Framework_Microsoft_Xna_Framework_Game_SortingFilteringCollection_1_ForEachFilteredItem_TUserData_System_Action_2_T_TUserData_TUserData (MonoGame.Framework.dll.7.s:69246)
9   DrawAStickmaniPhone             0x0003c3bc MonoGame_Framework_Microsoft_Xna_Framework_Game_Update_Microsoft_Xna_Framework_GameTime (MonoGame.Framework.dll.7.s:67887)
10  DrawAStickmaniPhone             0x004c7664 DrawAStickman_Core_StickmanGame_Update_Microsoft_Xna_Framework_GameTime (DrawAStickmanCore.dll.7.s:133288)
11  DrawAStickmaniPhone             0x0003c674 MonoGame_Framework_Microsoft_Xna_Framework_Game_DoUpdate_Microsoft_Xna_Framework_GameTime (MonoGame.Framework.dll.7.s:68138)
12  DrawAStickmaniPhone             0x0003c284 MonoGame_Framework_Microsoft_Xna_Framework_Game_Tick (MonoGame.Framework.dll.7.s:67751)
13  DrawAStickmaniPhone             0x0003e43c MonoGame_Framework_Microsoft_Xna_Framework_iOSGamePlatform_RunTick (MonoGame.Framework.dll.7.s:70871)
14  DrawAStickmaniPhone             0x0003e39c MonoGame_Framework_Microsoft_Xna_Framework_iOSGamePlatform_Tick (MonoGame.Framework.dll.7.s:70820)
15  DrawAStickmaniPhone             0x002fe8c0 monotouch_MonoTouch_Foundation_NSActionDispatcher_Apply + 12
16  DrawAStickmaniPhone             0x006de878 wrapper_runtime_invoke_object_runtime_invoke_dynamic_intptr_intptr_intptr_intptr_0 (mscorlib.dll.7.s:468944)
17  DrawAStickmaniPhone             0x00963780 mono_jit_runtime_invoke (mini.c:5792)
18  DrawAStickmaniPhone             0x009cdc04 mono_runtime_invoke (object.c:2788)
19  DrawAStickmaniPhone             0x0095aba4 native_to_managed_trampoline_MonoTouch_Foundation_NSActionDispatcher_Apply (registrar.m:19)

Looking at this, it appears to deadlocking on a line such as this:

Frame frame;
if (myFramesDictionary != null && myFramesDictionary.TryGetValue(index, out frame))
{
    //Some code here
}

Frame is a struct, myFramesDictionary is a Dictionary<int, Frame>.

Is this a possible bug in MonoTouch 5.3.x? I don't know how to recreate the issue without sending our entire app to Xamarin.

UPDATE

We disabled the LLVM compiler option and it fixed the hang.

I was not able to create a small project to reproduce the issue. Not sure I want to send the entire app to Xamarin to debug. Any ideas on re-creating this?

Upvotes: 4

Views: 208

Answers (2)

jonathanpeppers
jonathanpeppers

Reputation: 26505

I updated to XCode 4.4 and command line tools and this problem went away.

I am not sure if the XCode update fixed it, or perhaps I updated XCode and not the command line tools.

Upvotes: 0

Rolf Bjarne Kvinge
Rolf Bjarne Kvinge

Reputation: 19345

Unless you have some very strange memory corruptions, you will not deadlock in memset.

Besides, to diagnose a deadlock you need to show more than one thread, since you need at least two threads to deadlock in the first place :)

I believe you're running into an infinite loop of some sort. You can easily check this either with a breakpoint in a debugger or with a Console.WriteLine at the start of frame #1 in your crash report.

Upvotes: 2

Related Questions