Search Unity

Bug null pointer dereference - (ParticleSystemParticles::CopyToArrayAOS) after Unity Update

Discussion in 'Universal Render Pipeline' started by Meatloaf4, Apr 12, 2023.

  1. Meatloaf4

    Meatloaf4

    Joined:
    Jul 30, 2013
    Posts:
    183
    Hello I think I may be experiencing a bug in Unity due to the way I am saving and reloading particles between physics scenes.

    First off here is the error I am getting.

    Android Logs
    Code (CSharp):
    1. 04-12 09:28:01.812  3437  3538 E CRASH   : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
    2. 04-12 09:28:01.812  3437  3538 E CRASH   : Version '2020.3.46f1 (18bc01a066b4)', Build type 'Development', Scripting Backend 'il2cpp', CPU 'arm64-v8a'
    3. 04-12 09:28:01.812  3437  3538 E CRASH   : Build fingerprint: 'google/raven/raven:13/TQ2A.230305.008.E1/9677224:user/release-keys'
    4. 04-12 09:28:01.812  3437  3538 E CRASH   : Revision: 'MP1.0'
    5. 04-12 09:28:01.812  3437  3538 E CRASH   : ABI: 'arm64'
    6. 04-12 09:28:01.812  3437  3538 E CRASH   : Timestamp: 2023-04-12 09:28:01-0700
    7. 04-12 09:28:01.812  3437  3538 E CRASH   : pid: 3437, tid: 3538, name: Job.Worker 2  >>> com.breakstepstudios.commandcenterearth <<<
    8. 04-12 09:28:01.812  3437  3538 E CRASH   : uid: 10427
    9. 04-12 09:28:01.812  3437  3538 E CRASH   : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x204
    10. 04-12 09:28:01.812  3437  3538 E CRASH   : Cause: null pointer dereference
    11. 04-12 09:28:01.812  3437  3538 E CRASH   :     x0  0000007671d95230  x1  000000772b467748  x2  0000000000000001  x3  0000000000000081
    12. 04-12 09:28:01.812  3437  3538 E CRASH   :     x4  000000772b4688a0  x5  000000772b4677d8  x6  000000006a1a66eb  x7  00000076d0027280
    13. 04-12 09:28:01.812  3437  3538 E CRASH   :     x8  0000000000000204  x9  000000772b46776c  x10 0000000000000000  x11 000000772b467778
    14. 04-12 09:28:01.812  3437  3538 E CRASH   :     x12 0000000000000001  x13 000000772b467748  x14 0000000000000204  x15 41d8cc8241f09564
    15. 04-12 09:28:01.812  3437  3538 E CRASH   :     x16 0000000000000000  x17 0000007a63a10fe0  x18 0000000000002ede  x19 000000772b467748
    16. 04-12 09:28:01.812  3437  3538 E CRASH   :     x20 0000007671d95230  x21 0000000000000000  x22 0000000000000081  x23 0000000000000001
    17. 04-12 09:28:01.812  3437  3538 E CRASH   :     x24 0000007671d95848  x25 000000772b4677c0  x26 0000000000000084  x27 0000007723771e30
    18. 04-12 09:28:01.812  3437  3538 E CRASH   :     x28 0000000000000081  x29 0000000000000002
    19. 04-12 09:28:01.812  3437  3538 E CRASH   :     sp  000000772b4676d0  lr  000000772298bf48  pc  00000077227eca44
    20. 04-12 09:28:01.812  3437  3538 E CRASH   : backtrace:
    21. 04-12 09:28:01.812  3437  3538 E CRASH   :       #00 pc 0000000000b6fa44  /data/app/~~RDoVFOH7CHhukFChKdwo_Q==/com.breakstepstudios.commandcenterearth-pqs_0V62gpIYLagrpQRwEw==/lib/arm64/libunity.so (ParticleSystemParticles::CopyToArrayAOS(ParticleSystemParticle*, int, int) const+176) (BuildId: 4e68e86bbb46cea51faef290d2c29a1f596cb4b6)
    22. 04-12 09:28:01.813  3437  3538 E CRASH   :       #01 pc 0000000000d0ef44  /data/app/~~RDoVFOH7CHhukFChKdwo_Q==/com.breakstepstudios.commandcenterearth-pqs_0V62gpIYLagrpQRwEw==/lib/arm64/libunity.so (ParticleSystemTrailGeometryJob::ConfigurePerParticleTrailParams(ParticleLineParameters&, ParticleSystemParticles const*, unsigned long, ParticleSystemTrailGeometryJob const&, float)+56) (BuildId: 4e68e86bbb46cea51faef290d2c29a1f596cb4b6)
    23. 04-12 09:28:01.813  3437  3538 E CRASH   :       #02 pc 0000000000d0daf8  /data/app/~~RDoVFOH7CHhukFChKdwo_Q==/com.breakstepstudios.commandcenterearth-pqs_0V62gpIYLagrpQRwEw==/lib/arm64/libunity.so (ParticleSystemTrailGeometryJob::RenderJobCommon(ParticleSystemTrailGeometryJob&, void*, unsigned int)+1608) (BuildId: 4e68e86bbb46cea51faef290d2c29a1f596cb4b6)
    24. 04-12 09:28:01.813  3437  3538 E CRASH   :       #03 pc 0000000000d0cca4  /data/app/~~RDoVFOH7CHhukFChKdwo_Q==/com.breakstepstudios.commandcenterearth-pqs_0V62gpIYLagrpQRwEw==/lib/arm64/libunity.so (ParticleSystemTrailGeometryJob::RenderJob(SharedGeometryJobData*, unsigned int)+100) (BuildId: 4e68e86bbb46cea51faef290d2c29a1f596cb4b6)
    25. 04-12 09:28:01.813  3437  3538 E CRASH   :       #04 pc 00000000005030a0  /data/app/~~RDoVFOH7CHhukFChKdwo_Q==/com.breakstepstudios.commandcenterearth-pqs_0V62gpIYLagrpQRwEw==/lib/arm64/libunity.so (JobQueue::Exec(JobInfo*, long long, int, bool)+120) (BuildId: 4e68e86bbb46cea51faef290d2c29a1f596cb4b6)
    26. 04-12 09:28:01.813  3437  3538 E CRASH   :       #05 pc 0000000000503388  /data/app/~~RDoVFOH7CHhukFChKdwo_Q==/com.breakstepstudios.commandcenterearth-pqs_0V62gpIYLagrpQRwEw==/lib/arm64/libunity.so (JobQueue::Steal(JobGroup*, JobInfo*, long long, int, bool, bool)+344) (BuildId: 4e68e86bbb46cea51faef290d2c29a1f596cb4b6)
    27. 04-12 09:28:01.813  3437  3538 E CRASH   :       #06 pc 00000000005034ec  /data/app/~~RDoVFOH7CHhukFChKdwo_Q==/com.breakstepstudios.commandcenterearth-pqs_0V62gpIYLagrpQRwEw==/lib/arm64/libunity.so (JobQueue::ExecuteJobFromQueue(bool, bool&)+172) (BuildId: 4e68e86bbb46cea51faef290d2c29a1f596cb4b6)
    28. 04-12 09:28:01.813  3437  3538 E CRASH   :       #07 pc 0000000000503958  /data/app/~~RDoVFOH7CHhukFChKdwo_Q==/com.breakstepstudios.commandcenterearth-pqs_0V62gpIYLagrpQRwEw==/lib/arm64/libunity.so (JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*)+912) (BuildId: 4e68e86bbb46cea51faef290d2c29a1f596cb4b6)
    29. 04-12 09:28:01.813  3437  3538 E CRASH   :       #08 pc 0000000000502a48  /data/app/~~RDoVFOH7CHhukFChKdwo_Q==/com.breakstepstudios.commandcenterearth-pqs_0V62gpIYLagrpQRwEw==/lib/arm64/libunity.so (JobQueue::WorkLoop(void*)+228) (BuildId: 4e68e86bbb46cea51faef290d2c29a1f596cb4b6)
    30. 04-12 09:28:01.814  3437  3538 E CRASH   :       #09 pc 00000000007044f4  /data/app/~~RDoVFOH7CHhukFChKdwo_Q==/com.breakstepstudios.commandcenterearth-pqs_0V62gpIYLagrpQRwEw==/lib/arm64/libunity.so (Thread::RunThreadWrapper(void*)+512) (BuildId: 4e68e86bbb46cea51faef290d2c29a1f596cb4b6)
    31. 04-12 09:28:01.814  3437  3538 E CRASH   :       #10 pc 00000000000c226c  /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+204) (BuildId: dc4001c2ef2dfc23467040797a96840c)
    32. 04-12 09:28:01.814  3437  3538 E CRASH   :       #11 pc 0000000000054a30  /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+64) (BuildId: dc4001c2ef2dfc23467040797a96840c)
    And here is how I am saving and loading my particle system state (including trails)

    ParticleSystemExtensions (Save & Restore Snapshots)
    Code (CSharp):
    1. using UnityEngine;
    2.  
    3. namespace StudioName.Runtime.ExtensionAndHelpers
    4. {
    5.     /// <summary>
    6.     /// Extends the <see cref="UnityEngine.ParticleSystem"/> class with additional functionality
    7.     /// </summary>
    8.     public static class ParticleSystemExtensions
    9.     {
    10.         /// <summary>
    11.         /// Saves this point in time for the particle system in order to restore to this point in time later
    12.         /// </summary>
    13.         /// <param name="particleSystem">The particle system we are operating on</param>
    14.         /// <param name="withChildren">If true will also snapshot the child particle systems as well, false will only save this particle system.</param>
    15.         /// <returns>The snapshot/s to restore to later. If withChildren is false only first element will be filled</returns>
    16.         public static ParticleSystemSnapshot[] SaveSnapshot(this ParticleSystem particleSystem, bool withChildren = true)
    17.         {
    18.             //don't save children so only snapshot current particle system
    19.             if (!withChildren)
    20.             {
    21.                 return new[] { SaveSnapshotInternal(particleSystem) };
    22.             }
    23.          
    24.             //we want to save children as well so loop through and snapshot all of them returning them in order snapshotted
    25.             var particleSystems = particleSystem.GetComponentsInChildren<ParticleSystem>();
    26.             var snapshots = new ParticleSystemSnapshot[particleSystems.Length];
    27.             for (var i = 0; i < particleSystems.Length; i++)
    28.             {
    29.                 snapshots[i] = particleSystems[i].SaveSnapshotInternal();
    30.             }
    31.          
    32.             return snapshots;
    33.         }
    34.  
    35.         /// <summary>
    36.         /// Restore the particle system to the point in time provided by the snapshots
    37.         /// </summary>
    38.         /// <param name="particleSystem">The particle system we are operating on</param>
    39.         /// <param name="snapshots">The snapshot/s in time to restore the particle system (and potentially it's children) to. If withChildren = false only one particle system need be specified</param>
    40.         /// <param name="withChildren">If true will also restore the children with the snapshots provided, false will only restore this particle system</param>
    41.         public static void RestoreSnapshot(this ParticleSystem particleSystem, ParticleSystemSnapshot[] snapshots, bool withChildren = true)
    42.         {
    43.             if (!withChildren)
    44.             {
    45.                 //throw an exception if we don't at least have one snapshot
    46.                 if (snapshots.Length <= 0)
    47.                 {
    48.                     throw new System.Exception("No snapshots provided to restore to");
    49.                 }
    50.                 particleSystem.RestoreSnapshotInternal(snapshots[0]);
    51.                 return;
    52.             }
    53.          
    54.             var particleSystems = particleSystem.GetComponentsInChildren<ParticleSystem>();
    55.             //throw an exception if we don't have the same number of snapshots as particle systems
    56.             //TODO we may not want to throw an exception here as maybe they only want to restore a subset of particle systems
    57.             if (snapshots.Length < particleSystems.Length)
    58.             {
    59.                 throw new System.Exception("Number of snapshots provided does not match number of particle systems.");
    60.             }
    61.          
    62.             //restore all of our child particle system
    63.             for(var i = 0; i < particleSystems.Length; i++)
    64.             {
    65.                 particleSystems[i].RestoreSnapshotInternal(snapshots[i]);
    66.             }
    67.         }
    68.  
    69.         /// <summary>
    70.         /// Restore the particle system to this point in time
    71.         /// </summary>
    72.         /// <param name="particleSystem">The particle system we are operating on</param>
    73.         /// <param name="snapshot">The snapshot in time to restore the particle system to</param>
    74.         public static void RestoreSnapshotInternal(this ParticleSystem particleSystem, ParticleSystemSnapshot snapshot)
    75.         {
    76.             particleSystem.SetPlaybackState(snapshot.playbackState);
    77.             particleSystem.SetParticles(snapshot.particles, snapshot.particles.Length);
    78.             particleSystem.SetTrails(snapshot.trails);
    79.             //TODO the below may be buggy, double check returning to correct play state is working as it's supposed to later
    80.             //if our particle was stopped when we saved our snapshot that means no particles were alive so clear them all
    81.             //and don't continue below
    82.             if(snapshot.isStopped)
    83.             {
    84.                 particleSystem.Stop(false, ParticleSystemStopBehavior.StopEmittingAndClear);
    85.                 return;
    86.             }
    87.             //if we are paused we are not playing or emitting
    88.             if (snapshot.isPaused)
    89.             {
    90.                 particleSystem.Pause(false);
    91.                 return;
    92.             }
    93.             //if we were playing ensure we start things back up again
    94.             if (snapshot.isPlaying)
    95.             {
    96.                 particleSystem.Play(false);
    97.             }
    98.             //we may have been playing but called Stop(ParticleSystemStopBehavior.StopEmitting) when we saved the snapshot
    99.             //bottom line make sure to stop emitting if that's what we were doing when snapshot was saved
    100.             if (!snapshot.isEmitting)
    101.             {
    102.                 particleSystem.Stop(false, ParticleSystemStopBehavior.StopEmitting);
    103.             }
    104.         }
    105.      
    106.         private static ParticleSystemSnapshot SaveSnapshotInternal(this ParticleSystem particleSystem)
    107.         {
    108.             var playbackState = particleSystem.GetPlaybackState();
    109.             var particles = new ParticleSystem.Particle[particleSystem.particleCount];
    110.             particleSystem.GetParticles(particles);
    111.             var trails = particleSystem.GetTrails();
    112.             return new ParticleSystemSnapshot
    113.             {
    114.                 playbackState = playbackState,
    115.                 particles = particles,
    116.                 trails = trails,
    117.                 isEmitting = particleSystem.isEmitting,
    118.                 isPlaying = particleSystem.isPlaying,
    119.                 isPaused = particleSystem.isPaused,
    120.                 isStopped = particleSystem.isStopped,
    121.             };
    122.         }
    123.      
    124.         /// <summary>
    125.         /// A snapshot of a point in time for a given particle system
    126.         /// </summary>
    127.         public struct ParticleSystemSnapshot
    128.         {
    129.             /// <summary>
    130.             /// The playback state of the particle system snapshot
    131.             /// </summary>
    132.             public ParticleSystem.PlaybackState playbackState;
    133.             /// <summary>
    134.             /// The particles of the particle system snapshot
    135.             /// </summary>
    136.             public ParticleSystem.Particle[] particles;
    137.             /// <summary>
    138.             /// The trails of the particle system snapshot
    139.             /// </summary>
    140.             public ParticleSystem.Trails trails;
    141.             /// <summary>
    142.             /// Is the particle system emitting particles. See <see cref="ParticleSystem.isEmitting"/>
    143.             /// </summary>
    144.             public bool isEmitting;
    145.             /// <summary>
    146.             /// Is the particle system playing. See <see cref="ParticleSystem.isPlaying"/>
    147.             /// </summary>
    148.             public bool isPlaying;
    149.             /// <summary>
    150.             /// Is the particle system paused. See <see cref="ParticleSystem.isPaused"/>
    151.             /// </summary>
    152.             public bool isPaused;
    153.             /// <summary>
    154.             /// Is the particle system stopped. See <see cref="ParticleSystem.isStopped"/>
    155.             /// </summary>
    156.             public bool isStopped;
    157.         }
    158.     }
    159. }
    The code works fine on Unity 2020.3.12f1 but once I upgraded to Unity 2020.3.46f1 I ran into this issue. Another important change is that I did start targeting Android version 31 once I updated Unity (the reason I updated to begin with).

    That said I wonder if this bug is occurring as a result of this fix?

    https://issuetracker.unity3d.com/is...m-dot-gettrails-api-forces-gc-dot-alloc-calls

    Finally to give some context I use my extensions to save a my "particle snapshot" on one physics 2d scene and restore the "particle snapshot" when the object is moved into another physics 2d scene.

    The strange part (and why I think it's a bug) is because it will work fine sometimes and crash the game seemingly randomly other times.

    From what I can tell I'm using the API correctly, but perhaps someone can shed light on if I'm doing something that would produce this error.
     
  2. Meatloaf4

    Meatloaf4

    Joined:
    Jul 30, 2013
    Posts:
    183
    So after some investigation this looks to only be occurring on Android.

    Also, after I cleared the app cache and data it looks like the bug has disappeared. However, it is possible the bug just hasn't manifested again yet.

    I wonder if some Unity / Android expert could chime in here and shed some light on if clearing the app cache / data could have fixed the bug. I have had instances where an old cache has manifested issues. Which is why I ask.

    Thanks for any help in advance!
     
  3. Meatloaf4

    Meatloaf4

    Joined:
    Jul 30, 2013
    Posts:
    183
    I was wrong about this only occuring on Android. The bug is now appearing on iOS as well. Here are the logs below.

    Code (CSharp):
    1. # Crashlytics - Stack trace
    2. # Application: com.breakstepstudios.commandcenterearth
    3. # Platform: apple
    4. # Version: 2.0.2 (55)
    5. # Issue: 3d54a001d269d52bb25edb73a9d4f1df
    6. # Session: 561227cd15f84ad484b158d4da6da1a7_DNE_0_v2
    7. # Date: Wed May 03 2023 15:22:01 GMT-0700 (Pacific Daylight Time)
    8.  
    9. com.apple.main-thread
    10. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    11. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    12. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    13. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    14. 4  UnityFramework                 0x9b1408 JobQueue::WaitForJobGroupID(JobGroupID, JobQueue::JobQueueWorkStealMode) + 1841 (JobQueue.cpp:1841)
    15. 5  UnityFramework                 0x9aee74 CompleteFenceInternal(JobFence&, WorkStealMode) + 17 (Jobs.cpp:17)
    16. 6  UnityFramework                 0x6d92e8 ParticleSystemManager::ClearAllFences(bool) + 848428 (ParticleSystem.cpp:848428)
    17. 7  UnityFramework                 0x6d8fd8 ParticleSystem::SyncJobs(bool) + 661 (ParticleSystem.cpp:661)
    18. 8  UnityFramework                 0x6d8ebc ParticleSystem::Deactivate(DeactivateOperation) + 1914 (ParticleSystem.cpp:1914)
    19. 9  UnityFramework                 0x861f04 GameObject::ActivateAwakeRecursivelyInternal(DeactivateOperation, AwakeFromLoadQueue&) + 198 (GameObject.cpp:198)
    20. 10 UnityFramework                 0x861e8c GameObject::ActivateAwakeRecursivelyInternal(DeactivateOperation, AwakeFromLoadQueue&) + 191 (GameObject.cpp:191)
    21. 11 UnityFramework                 0x861e8c GameObject::ActivateAwakeRecursivelyInternal(DeactivateOperation, AwakeFromLoadQueue&) + 191 (GameObject.cpp:191)
    22. 12 UnityFramework                 0x861e8c GameObject::ActivateAwakeRecursivelyInternal(DeactivateOperation, AwakeFromLoadQueue&) + 191 (GameObject.cpp:191)
    23. 13 UnityFramework                 0x861e8c GameObject::ActivateAwakeRecursivelyInternal(DeactivateOperation, AwakeFromLoadQueue&) + 191 (GameObject.cpp:191)
    24. 14 UnityFramework                 0x861fac GameObject::ActivateAwakeRecursively(DeactivateOperation) + 225 (GameObject.cpp:225)
    25. 15 UnityFramework                 0x9e8124 UnityScene::HandleChangingPhysicsScenes(GameObject&, UnityScene*, UnityScene*) + 574 (UnityScene.cpp:574)
    26. 16 UnityFramework                 0x9e7704 UnityScene::OnGameObjectChangedScene(GameObject&, UnityScene*, UnityScene*) + 322 (UnityScene.cpp:322)
    27. 17 UnityFramework                 0xb365a4 SceneManager_CUSTOM_MoveGameObjectToScene_Injected(ScriptingBackendNativeObjectPtrOpaque*, int const&) + 65 (ScriptingNativeTypes.h:65)
    28. 18 UnityFramework                 0x2f94564 selector_thread(void*) (.cold.1) + 4524705124
    29. 19 UnityFramework                 0x1486628 selector_thread(void*) (.cold.1) + 4496336424
    30. 20 UnityFramework                 0x25c2274 selector_thread(void*) (.cold.1) + 4514407028
    31. 21 UnityFramework                 0x25e7510 selector_thread(void*) (.cold.1) + 4514559248
    32. 22 UnityFramework                 0x25c0650 selector_thread(void*) (.cold.1) + 4514399824
    33. 23 UnityFramework                 0x25b6eec selector_thread(void*) (.cold.1) + 4514361068
    34. 24 UnityFramework                 0x25c09c4 selector_thread(void*) (.cold.1) + 4514400708
    35. 25 UnityFramework                 0x25c07e4 selector_thread(void*) (.cold.1) + 4514400228
    36. 26 UnityFramework                 0x153c2f8 selector_thread(void*) (.cold.1) + 4497081080
    37. 27 UnityFramework                 0x152e3fc selector_thread(void*) (.cold.1) + 4497023996
    38. 28 UnityFramework                 0x152e0d4 selector_thread(void*) (.cold.1) + 4497023188
    39. 29 UnityFramework                 0x153c0b4 selector_thread(void*) (.cold.1) + 4497080500
    40. 30 UnityFramework                 0x153d1f8 selector_thread(void*) (.cold.1) + 4497084920
    41. 31 UnityFramework                 0x1541b74 selector_thread(void*) (.cold.1) + 4497103732
    42. 32 UnityFramework                 0x11308c RuntimeInvoker_TrueVoid_t700C6383A2A510C2CF4DD86DABD5CA9FF70ADAC5(void (*)(), MethodInfo const*, void*, void**) + 4475941004 (Il2CppInvokerTable.cpp:4475941004)
    43. 33 UnityFramework                 0x1306fcc il2cpp::vm::Runtime::Invoke(MethodInfo const*, void*, void**, Il2CppException**) + 564 (Runtime.cpp:564)
    44. 34 UnityFramework                 0xaa91f0 scripting_method_invoke(ScriptingMethodPtr, ScriptingObjectPtr, ScriptingArguments&, ScriptingExceptionPtr*, bool) + 292 (ScriptingApi_Il2Cpp.cpp:292)
    45. 35 UnityFramework                 0xaad120 ScriptingInvocation::Invoke(ScriptingExceptionPtr*, bool) + 273 (ScriptingInvocation.cpp:273)
    46. 36 UnityFramework                 0xac3c2c MonoBehaviour::CallUpdateMethod(int) + 534 (MonoBehaviour.cpp:534)
    47. 37 UnityFramework                 0x8f5b04 void BaseBehaviourManager::CommonUpdate<FixedBehaviourManager>() + 195 (Behaviour.cpp:195)
    48. 38 UnityFramework                 0x9cf3f0 ExecutePlayerLoop(NativePlayerLoopSystem*) + 383 (PlayerLoop.cpp:383)
    49. 39 UnityFramework                 0x9cf430 ExecutePlayerLoop(NativePlayerLoopSystem*) + 407 (PlayerLoop.cpp:407)
    50. 40 UnityFramework                 0x9cf6fc PlayerLoop() + 514 (PlayerLoop.cpp:514)
    51. 41 UnityFramework                 0xe2f918 UnityPlayerLoopImpl(bool) + 328 (LibEntryPoint.mm:328)
    52. 42 UnityFramework                 0x169f0 -[UnityAppController(Rendering) repaint] + 233 (UnityAppController+Rendering.mm:233)
    53. 43 UnityFramework                 0x16980 -[UnityAppController(Rendering) repaintDisplayLink] + 72 (UnityAppController+Rendering.mm:72)
    54. 44 QuartzCore                     0x28ca4 CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 820
    55. 45 QuartzCore                     0x156144 CA::Display::DisplayLink::dispatch_deferred_display_links(unsigned int) + 380
    56. 46 UIKitCore                      0x6525b0 _UIUpdateSequenceRun + 84
    57. 47 UIKitCore                      0xca1310 schedulerStepScheduledMainSection + 172
    58. 48 UIKitCore                      0xca04dc runloopSourceCallback + 92
    59. 49 CoreFoundation                 0xd5f24 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 28
    60. 50 CoreFoundation                 0xe22fc __CFRunLoopDoSource0 + 176
    61. 51 CoreFoundation                 0x66220 __CFRunLoopDoSources0 + 340
    62. 52 CoreFoundation                 0x7bb7c __CFRunLoopRun + 836
    63. 53 CoreFoundation                 0x80eb0 CFRunLoopRunSpecific + 612
    64. 54 GraphicsServices               0x1368 GSEventRunModal + 164
    65. 55 UIKitCore                      0x3a1668 -[UIApplication _run] + 888
    66. 56 UIKitCore                      0x3a12cc UIApplicationMain + 340
    67. 57 UnityFramework                 0x16524 -[UnityFramework runUIApplicationMainWithArgc:argv:] + 96 (main.mm:96)
    68. 58 CommandCenterEarth             0x7ccc main + 28 (main.mm:28)
    69. 59 ???                            0x1ec66c960 (Missing)
    70.  
    71. Thread
    72. 0  libsystem_kernel.dylib         0x12b0 __workq_kernreturn + 8
    73. 1  libsystem_pthread.dylib        0xe44 _pthread_wqthread + 364
    74. 2  libsystem_pthread.dylib        0xb98 start_wqthread + 8
    75.  
    76. Thread
    77. 0  libsystem_pthread.dylib        0xb90 start_wqthread + 254
    78.  
    79. com.apple.uikit.eventfetch-thread
    80. 0  libsystem_kernel.dylib         0xda8 mach_msg2_trap + 8
    81. 1  libsystem_kernel.dylib         0x13a1c mach_msg2_internal + 80
    82. 2  libsystem_kernel.dylib         0x13c5c mach_msg_overwrite + 388
    83. 3  libsystem_kernel.dylib         0x12ec mach_msg + 24
    84. 4  CoreFoundation                 0x7aac4 __CFRunLoopServiceMachPort + 160
    85. 5  CoreFoundation                 0x7bd08 __CFRunLoopRun + 1232
    86. 6  CoreFoundation                 0x80eb0 CFRunLoopRunSpecific + 612
    87. 7  Foundation                     0x42054 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 212
    88. 8  Foundation                     0x41f3c -[NSRunLoop(NSRunLoop) runUntilDate:] + 64
    89. 9  UIKitCore                      0x4d66a4 -[UIEventFetcher threadMain] + 436
    90. 10 Foundation                     0x5b518 __NSThread__start__ + 716
    91. 11 libsystem_pthread.dylib        0x16cc _pthread_start + 148
    92. 12 libsystem_pthread.dylib        0xba4 thread_start + 8
    93.  
    94. GC Finalizer
    95. 0  libsystem_kernel.dylib         0x167c __psynch_cvwait + 8
    96. 1  libsystem_pthread.dylib        0x806c _pthread_cond_wait + 1232
    97. 2  UnityFramework                 0x12cedfc il2cpp::os::posix::PosixWaitObject::Wait(unsigned int, bool) + 120 (PosixWaitObject.cpp:120)
    98. 3  UnityFramework                 0x12a1bf0 il2cpp::gc::FinalizerThread(void*) + 438 (BoehmGC.cpp:438)
    99. 4  UnityFramework                 0x12c5d30 il2cpp::os::Thread::RunWrapper(void*) + 183 (Thread.cpp:183)
    100. 5  UnityFramework                 0x12c7fe0 il2cpp::os::ThreadImpl::ThreadStartWrapper(void*) + 127 (ThreadImpl.cpp:127)
    101. 6  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    102. 7  libsystem_pthread.dylib        0xba4 thread_start + 8
    103.  
    104. Job.Worker 0
    105. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    106. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    107. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    108. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    109. 4  UnityFramework                 0x9b0708 JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*) + 33 (Baselib_CappedSemaphore_SemaphoreBased.inl.h:33)
    110. 5  UnityFramework                 0x9af920 JobQueue::WorkLoop(void*) + 1103 (JobQueue.cpp:1103)
    111. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    112. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    113. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    114.  
    115. Job.Worker 1
    116. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    117. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    118. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    119. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    120. 4  UnityFramework                 0x9b0708 JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*) + 33 (Baselib_CappedSemaphore_SemaphoreBased.inl.h:33)
    121. 5  UnityFramework                 0x9af920 JobQueue::WorkLoop(void*) + 1103 (JobQueue.cpp:1103)
    122. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    123. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    124. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    125.  
    126. Job.Worker 2
    127. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    128. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    129. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    130. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    131. 4  UnityFramework                 0x9b0708 JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*) + 33 (Baselib_CappedSemaphore_SemaphoreBased.inl.h:33)
    132. 5  UnityFramework                 0x9af920 JobQueue::WorkLoop(void*) + 1103 (JobQueue.cpp:1103)
    133. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    134. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    135. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    136.  
    137. Job.Worker 3
    138. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    139. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    140. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    141. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    142. 4  UnityFramework                 0x9b0708 JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*) + 33 (Baselib_CappedSemaphore_SemaphoreBased.inl.h:33)
    143. 5  UnityFramework                 0x9af920 JobQueue::WorkLoop(void*) + 1103 (JobQueue.cpp:1103)
    144. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    145. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    146. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    147.  
    148. Job.Worker 4
    149. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    150. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    151. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    152. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    153. 4  UnityFramework                 0x9b0708 JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*) + 33 (Baselib_CappedSemaphore_SemaphoreBased.inl.h:33)
    154. 5  UnityFramework                 0x9af920 JobQueue::WorkLoop(void*) + 1103 (JobQueue.cpp:1103)
    155. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    156. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    157. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    158.  
    159. Background Job.Worker 0
    160. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    161. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    162. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    163. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    164. 4  UnityFramework                 0x9b0708 JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*) + 33 (Baselib_CappedSemaphore_SemaphoreBased.inl.h:33)
    165. 5  UnityFramework                 0x9af920 JobQueue::WorkLoop(void*) + 1103 (JobQueue.cpp:1103)
    166. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    167. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    168. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    169.  
    170. Background Job.Worker 1
    171. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    172. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    173. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    174. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    175. 4  UnityFramework                 0x9b0708 JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*) + 33 (Baselib_CappedSemaphore_SemaphoreBased.inl.h:33)
    176. 5  UnityFramework                 0x9af920 JobQueue::WorkLoop(void*) + 1103 (JobQueue.cpp:1103)
    177. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    178. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    179. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    180.  
    181. Background Job.Worker 2
    182. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    183. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    184. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    185. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    186. 4  UnityFramework                 0x9b0708 JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*) + 33 (Baselib_CappedSemaphore_SemaphoreBased.inl.h:33)
    187. 5  UnityFramework                 0x9af920 JobQueue::WorkLoop(void*) + 1103 (JobQueue.cpp:1103)
    188. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    189. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    190. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    191.  
    192. Background Job.Worker 3
    193. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    194. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    195. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    196. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    197. 4  UnityFramework                 0x9b0708 JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*) + 33 (Baselib_CappedSemaphore_SemaphoreBased.inl.h:33)
    198. 5  UnityFramework                 0x9af920 JobQueue::WorkLoop(void*) + 1103 (JobQueue.cpp:1103)
    199. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    200. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    201. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    202.  
    203. Background Job.Worker 4
    204. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    205. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    206. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    207. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    208. 4  UnityFramework                 0x9b0708 JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*) + 33 (Baselib_CappedSemaphore_SemaphoreBased.inl.h:33)
    209. 5  UnityFramework                 0x9af920 JobQueue::WorkLoop(void*) + 1103 (JobQueue.cpp:1103)
    210. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    211. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    212. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    213.  
    214. Background Job.Worker 5
    215. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    216. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    217. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    218. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    219. 4  UnityFramework                 0x9b0708 JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*) + 33 (Baselib_CappedSemaphore_SemaphoreBased.inl.h:33)
    220. 5  UnityFramework                 0x9af920 JobQueue::WorkLoop(void*) + 1103 (JobQueue.cpp:1103)
    221. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    222. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    223. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    224.  
    225. Background Job.Worker 6
    226. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    227. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    228. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    229. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    230. 4  UnityFramework                 0x9b0708 JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*) + 33 (Baselib_CappedSemaphore_SemaphoreBased.inl.h:33)
    231. 5  UnityFramework                 0x9af920 JobQueue::WorkLoop(void*) + 1103 (JobQueue.cpp:1103)
    232. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    233. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    234. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    235.  
    236. Background Job.Worker 7
    237. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    238. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    239. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    240. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    241. 4  UnityFramework                 0x9b0708 JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*) + 33 (Baselib_CappedSemaphore_SemaphoreBased.inl.h:33)
    242. 5  UnityFramework                 0x9af920 JobQueue::WorkLoop(void*) + 1103 (JobQueue.cpp:1103)
    243. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    244. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    245. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    246.  
    247. Background Job.Worker 8
    248. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    249. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    250. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    251. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    252. 4  UnityFramework                 0x9b0708 JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*) + 33 (Baselib_CappedSemaphore_SemaphoreBased.inl.h:33)
    253. 5  UnityFramework                 0x9af920 JobQueue::WorkLoop(void*) + 1103 (JobQueue.cpp:1103)
    254. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    255. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    256. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    257.  
    258. Background Job.Worker 9
    259. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    260. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    261. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    262. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    263. 4  UnityFramework                 0x9b0708 JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*) + 33 (Baselib_CappedSemaphore_SemaphoreBased.inl.h:33)
    264. 5  UnityFramework                 0x9af920 JobQueue::WorkLoop(void*) + 1103 (JobQueue.cpp:1103)
    265. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    266. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    267. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    268.  
    269. Background Job.Worker 10
    270. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    271. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    272. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    273. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    274. 4  UnityFramework                 0x9b0708 JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*) + 33 (Baselib_CappedSemaphore_SemaphoreBased.inl.h:33)
    275. 5  UnityFramework                 0x9af920 JobQueue::WorkLoop(void*) + 1103 (JobQueue.cpp:1103)
    276. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    277. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    278. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    279.  
    280. Background Job.Worker 11
    281. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    282. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    283. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    284. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    285. 4  UnityFramework                 0x9b0708 JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*) + 33 (Baselib_CappedSemaphore_SemaphoreBased.inl.h:33)
    286. 5  UnityFramework                 0x9af920 JobQueue::WorkLoop(void*) + 1103 (JobQueue.cpp:1103)
    287. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    288. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    289. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    290.  
    291. Background Job.Worker 12
    292. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    293. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    294. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    295. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    296. 4  UnityFramework                 0x9b0708 JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*) + 33 (Baselib_CappedSemaphore_SemaphoreBased.inl.h:33)
    297. 5  UnityFramework                 0x9af920 JobQueue::WorkLoop(void*) + 1103 (JobQueue.cpp:1103)
    298. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    299. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    300. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    301.  
    302. Background Job.Worker 13
    303. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    304. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    305. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    306. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    307. 4  UnityFramework                 0x9b0708 JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*) + 33 (Baselib_CappedSemaphore_SemaphoreBased.inl.h:33)
    308. 5  UnityFramework                 0x9af920 JobQueue::WorkLoop(void*) + 1103 (JobQueue.cpp:1103)
    309. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    310. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    311. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    312.  
    313. Background Job.Worker 14
    314. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    315. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    316. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    317. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    318. 4  UnityFramework                 0x9b0708 JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*) + 33 (Baselib_CappedSemaphore_SemaphoreBased.inl.h:33)
    319. 5  UnityFramework                 0x9af920 JobQueue::WorkLoop(void*) + 1103 (JobQueue.cpp:1103)
    320. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    321. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    322. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    323.  
    324. Background Job.Worker 15
    325. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    326. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    327. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    328. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    329. 4  UnityFramework                 0x9b0708 JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*) + 33 (Baselib_CappedSemaphore_SemaphoreBased.inl.h:33)
    330. 5  UnityFramework                 0x9af920 JobQueue::WorkLoop(void*) + 1103 (JobQueue.cpp:1103)
    331. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    332. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    333. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    334.  
    335. BatchDeleteObjects
    336. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    337. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    338. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    339. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    340. 4  UnityFramework                 0xa526d0 ThreadedStreamBuffer::HandleOutOfBufferToReadFrom(ThreadedStreamBuffer::DataOffsets) + 41 (Baselib_Semaphore_SemaphoreBased.inl.h:41)
    341. 5  UnityFramework                 0x9cd80c BatchDeleteStep2Threaded(void*) + 93 (BatchDeleteObjects.cpp:93)
    342. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    343. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    344. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    345.  
    346. Loading.AsyncRead
    347. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    348. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    349. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    350. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    351. 4  UnityFramework                 0x8f146c AsyncReadManagerThreaded::ThreadEntry() + 41 (Baselib_Semaphore_SemaphoreBased.inl.h:41)
    352. 5  UnityFramework                 0x8f0fc4 AsyncReadManagerThreaded::StaticThreadEntry(void*) + 120 (AsyncReadManagerThreaded.cpp:120)
    353. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    354. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    355. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    356.  
    357. Thread
    358. 0  libsystem_pthread.dylib        0xb90 start_wqthread + 254
    359.  
    360. Crashed: UnityGfxDeviceWorker
    361. 0  UnityFramework                 0x6d600c ParticleSystemParticles::CopyToArrayAOS(ParticleSystemParticle*, int, int) const + 427 (ParticleSystemParticle.cpp:427)
    362. 1  UnityFramework                 0xcd1b8c ParticleSystemTrailGeometryJob::ConfigurePerParticleTrailParams(ParticleLineParameters&, ParticleSystemParticles const*, unsigned long, ParticleSystemTrailGeometryJob const&, float) + 3269 (ParticleSystemGeometryJob.cpp:3269)
    363. 2  UnityFramework                 0xcd07a0 ParticleSystemTrailGeometryJob::RenderJobCommon(ParticleSystemTrailGeometryJob&, void*, unsigned int) + 3105 (ParticleSystemGeometryJob.cpp:3105)
    364. 3  UnityFramework                 0xccfb70 ParticleSystemTrailGeometryJob::RenderJob(SharedGeometryJobData*, unsigned int) + 2991 (ParticleSystemGeometryJob.cpp:2991)
    365. 4  UnityFramework                 0x9aff84 JobQueue::Exec(JobInfo*, long long, int, bool) + 621 (JobQueue.cpp:621)
    366. 5  UnityFramework                 0x9b0250 JobQueue::Steal(JobGroup*, JobInfo*, long long, int, bool, bool) + 736 (JobQueue.cpp:736)
    367. 6  UnityFramework                 0x9b13b4 JobQueue::WaitForJobGroupID(JobGroupID, JobQueue::JobQueueWorkStealMode) + 1758 (JobQueue.cpp:1758)
    368. 7  UnityFramework                 0x9aee74 CompleteFenceInternal(JobFence&, WorkStealMode) + 17 (Jobs.cpp:17)
    369. 8  UnityFramework                 0xa79354 GeometryJobTasks::PutGeometryJobFence(GfxDevice&, GeometryJobFence) + 282 (Jobs.h:282)
    370. 9  UnityFramework                 0xa90254 GfxDevice::PutGeometryJobFence(GeometryJobFence&) + 76 (GeometryJob.h:76)
    371. 10 UnityFramework                 0xa902d0 GfxDevice::DrawSharedGeometryJobs(DynamicVBOBuffer const&, unsigned int, DynamicVBOBuffer const&, unsigned int, GeometryJobFence, DrawBuffersRange const*, unsigned long, VertexDeclaration*) + 876 (GfxDevice.cpp:876)
    372. 11 UnityFramework                 0xd8ba18 GfxDeviceWorker::RunCommand(ThreadedStreamBuffer&) + 776 (GfxDeviceWorker.cpp:776)
    373. 12 UnityFramework                 0xdfaad4 GfxDeviceWorkerAutoreleasePoolProxy + 5330 (GfxDeviceMetal.mm:5330)
    374. 13 UnityFramework                 0xd90908 GfxDeviceWorker::RunExt(ThreadedStreamBuffer&) + 389 (GfxDeviceWorker.cpp:389)
    375. 14 UnityFramework                 0xd8866c GfxDeviceWorker::RunGfxDeviceWorker(void*) + 353 (GfxDeviceWorker.cpp:353)
    376. 15 UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    377. 16 libsystem_pthread.dylib        0x16cc _pthread_start + 148
    378. 17 libsystem_pthread.dylib        0xba4 thread_start + 8
    379.  
    380. Thread
    381. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    382. 1  UnityFramework                 0x123ab10 FMOD_OS_Semaphore_Wait(FMOD_OS_SEMAPHORE*) + 3399812
    383. 2  UnityFramework                 0x12571c8 FMOD::Thread::callback(void*) + 3516220
    384. 3  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    385. 4  libsystem_pthread.dylib        0xba4 thread_start + 8
    386.  
    387. AURemoteIO::IOThread
    388. 0  libsystem_kernel.dylib         0xda8 mach_msg2_trap + 8
    389. 1  libsystem_kernel.dylib         0x13a1c mach_msg2_internal + 80
    390. 2  libsystem_kernel.dylib         0x13c5c mach_msg_overwrite + 388
    391. 3  libsystem_kernel.dylib         0x12ec mach_msg + 24
    392. 4  libEmbeddedSystemAUs.dylib     0xa824c void* caulk::thread_proxy<std::__1::tuple<caulk::thread::attributes, AURemoteIO::IOThread::IOThread(AURemoteIO&, caulk::thread::attributes const&, caulk::mach::os_workgroup_managed const&)::'lambda'(), std::__1::tuple<> > >(void*) + 556
    393. 5  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    394. 6  libsystem_pthread.dylib        0xba4 thread_start + 8
    395.  
    396. Thread
    397. 0  libsystem_kernel.dylib         0x1268 __semwait_signal + 8
    398. 1  libsystem_c.dylib              0x57d8 nanosleep + 220
    399. 2  libsystem_c.dylib              0x64a4 usleep + 68
    400. 3  UnityFramework                 0x123a6d8 FMOD_OS_Time_Sleep(unsigned int) + 3398732
    401. 4  UnityFramework                 0x1257234 FMOD::Thread::callback(void*) + 3516328
    402. 5  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    403. 6  libsystem_pthread.dylib        0xba4 thread_start + 8
    404.  
    405. com.apple.CoreMotion.MotionThread
    406. 0  libsystem_kernel.dylib         0xda8 mach_msg2_trap + 8
    407. 1  libsystem_kernel.dylib         0x13a1c mach_msg2_internal + 80
    408. 2  libsystem_kernel.dylib         0x13c5c mach_msg_overwrite + 388
    409. 3  libsystem_kernel.dylib         0x12ec mach_msg + 24
    410. 4  CoreFoundation                 0x7aac4 __CFRunLoopServiceMachPort + 160
    411. 5  CoreFoundation                 0x7bd08 __CFRunLoopRun + 1232
    412. 6  CoreFoundation                 0x80eb0 CFRunLoopRunSpecific + 612
    413. 7  CoreFoundation                 0xc4cd4 CFRunLoopRun + 64
    414. 8  CoreMotion                     0x13ef8 CLMotionActivity::isTypeInVehicle(CLMotionActivity::Type) + 22908
    415. 9  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    416. 10 libsystem_pthread.dylib        0xba4 thread_start + 8
    417.  
    418. Loading.PreloadManager
    419. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    420. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    421. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    422. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    423. 4  UnityFramework                 0x9dd0dc PreloadManager::Run() + 41 (Baselib_Semaphore_SemaphoreBased.inl.h:41)
    424. 5  UnityFramework                 0x9dd028 PreloadManager::Run(void*) + 183 (PreloadManager.cpp:183)
    425. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    426. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    427. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    428.  
    429. CloudJob.Worker 0
    430. 0  libsystem_kernel.dylib         0xd24 semaphore_wait_trap + 8
    431. 1  libdispatch.dylib              0x4524 _dispatch_sema4_wait + 28
    432. 2  libdispatch.dylib              0x4bd8 _dispatch_semaphore_wait_slow + 132
    433. 3  UnityFramework                 0xef5150 UnityClassic::Baselib_SystemSemaphore_Acquire(UnityClassic::Baselib_SystemSemaphore_Handle) + 36 (Baselib_SystemSemaphore_DarwinApi.inl.h:36)
    434. 4  UnityFramework                 0x9b0708 JobQueue::ProcessJobs(JobQueue::ThreadInfo*, void*) + 33 (Baselib_CappedSemaphore_SemaphoreBased.inl.h:33)
    435. 5  UnityFramework                 0x9af920 JobQueue::WorkLoop(void*) + 1103 (JobQueue.cpp:1103)
    436. 6  UnityFramework                 0xa510c0 Thread::RunThreadWrapper(void*) + 81 (Thread.cpp:81)
    437. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    438. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    439.  
    440. com.google.firebase.crashlytics.MachExceptionServer
    441. 0  UnityFramework                 0x2c81d8 FIRCLSProcessRecordAllThreads + 393 (FIRCLSProcess.c:393)
    442. 1  UnityFramework                 0x2c85b8 FIRCLSProcessRecordAllThreads + 424 (FIRCLSProcess.c:424)
    443. 2  UnityFramework                 0x2bf8c8 FIRCLSHandler + 34 (FIRCLSHandler.m:34)
    444. 3  UnityFramework                 0x2c2018 FIRCLSMachExceptionServer + 521 (FIRCLSMachException.c:521)
    445. 4  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    446. 5  libsystem_pthread.dylib        0xba4 thread_start + 8
    447.  
    448. com.apple.NSURLConnectionLoader
    449. 0  libsystem_kernel.dylib         0xda8 mach_msg2_trap + 8
    450. 1  libsystem_kernel.dylib         0x13a1c mach_msg2_internal + 80
    451. 2  libsystem_kernel.dylib         0x13c5c mach_msg_overwrite + 388
    452. 3  libsystem_kernel.dylib         0x12ec mach_msg + 24
    453. 4  CoreFoundation                 0x7aac4 __CFRunLoopServiceMachPort + 160
    454. 5  CoreFoundation                 0x7bd08 __CFRunLoopRun + 1232
    455. 6  CoreFoundation                 0x80eb0 CFRunLoopRunSpecific + 612
    456. 7  CFNetwork                      0x257ff0 _CFURLStorageSessionDisableCache + 61088
    457. 8  Foundation                     0x5b518 __NSThread__start__ + 716
    458. 9  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    459. 10 libsystem_pthread.dylib        0xba4 thread_start + 8
    460.  
    461. JavaScriptCore libpas scavenger
    462. 0  libsystem_kernel.dylib         0x167c __psynch_cvwait + 8
    463. 1  libsystem_pthread.dylib        0x806c _pthread_cond_wait + 1232
    464. 2  JavaScriptCore                 0xf703c scavenger_thread_main + 1164
    465. 3  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    466. 4  libsystem_pthread.dylib        0xba4 thread_start + 8
    467.  
    468. Thread
    469. 0  libsystem_kernel.dylib         0x167c __psynch_cvwait + 8
    470. 1  libsystem_pthread.dylib        0x8098 _pthread_cond_wait + 1276
    471. 2  UnityFramework                 0x12ced98 il2cpp::os::posix::PosixWaitObject::Wait(unsigned int, bool) + 153 (PosixWaitObject.cpp:153)
    472. 3  UnityFramework                 0x12c3e18 monitor_thread(void*) + 156 (ThreadPoolMonitorThread.cpp:156)
    473. 4  UnityFramework                 0x12f6770 il2cpp::vm::ThreadStart(void*) + 727 (Thread.cpp:727)
    474. 5  UnityFramework                 0x12c5d30 il2cpp::os::Thread::RunWrapper(void*) + 183 (Thread.cpp:183)
    475. 6  UnityFramework                 0x12c7fe0 il2cpp::os::ThreadImpl::ThreadStartWrapper(void*) + 127 (ThreadImpl.cpp:127)
    476. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    477. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    478.  
    479. Timer-Scheduler
    480. 0  libsystem_kernel.dylib         0x167c __psynch_cvwait + 8
    481. 1  libsystem_pthread.dylib        0x806c _pthread_cond_wait + 1232
    482. 2  UnityFramework                 0x12cedfc il2cpp::os::posix::PosixWaitObject::Wait(unsigned int, bool) + 120 (PosixWaitObject.cpp:120)
    483. 3  UnityFramework                 0x12b9494 il2cpp::icalls::mscorlib::System::Threading::WaitHandle::Wait_internal(void**, int, bool, int) + 91 (WaitHandle.cpp:91)
    484. 4  UnityFramework                 0x3284234 selector_thread(void*) (.cold.1) + 4527784500
    485. 5  UnityFramework                 0x3284100 selector_thread(void*) (.cold.1) + 4527784192
    486. 6  UnityFramework                 0x32b9394 selector_thread(void*) (.cold.1) + 4528001940
    487. 7  UnityFramework                 0x3223c6c selector_thread(void*) (.cold.1) + 4527389804
    488. 8  UnityFramework                 0x3269af4 selector_thread(void*) (.cold.1) + 4527676148
    489. 9  UnityFramework                 0x3323434 selector_thread(void*) (.cold.1) + 4528436276
    490. 10 UnityFramework                 0x3223c6c selector_thread(void*) (.cold.1) + 4527389804
    491. 11 UnityFramework                 0x11308c RuntimeInvoker_TrueVoid_t700C6383A2A510C2CF4DD86DABD5CA9FF70ADAC5(void (*)(), MethodInfo const*, void*, void**) + 4475941004 (Il2CppInvokerTable.cpp:4475941004)
    492. 12 UnityFramework                 0x1306fcc il2cpp::vm::Runtime::Invoke(MethodInfo const*, void*, void**, Il2CppException**) + 564 (Runtime.cpp:564)
    493. 13 UnityFramework                 0x12b8ee8 il2cpp::icalls::mscorlib::System::Threading::ThreadStart(void*) + 158 (Thread.cpp:158)
    494. 14 UnityFramework                 0x12c5d30 il2cpp::os::Thread::RunWrapper(void*) + 183 (Thread.cpp:183)
    495. 15 UnityFramework                 0x12c7fe0 il2cpp::os::ThreadImpl::ThreadStartWrapper(void*) + 127 (ThreadImpl.cpp:127)
    496. 16 libsystem_pthread.dylib        0x16cc _pthread_start + 148
    497. 17 libsystem_pthread.dylib        0xba4 thread_start + 8
    498.  
    499. Thread
    500. 0  libsystem_kernel.dylib         0x12b0 __workq_kernreturn + 8
    501. 1  libsystem_pthread.dylib        0xe44 _pthread_wqthread + 364
    502. 2  libsystem_pthread.dylib        0xb98 start_wqthread + 8
    503.  
    504. IL2CPP Threadpool worker
    505. 0  libsystem_kernel.dylib         0x167c __psynch_cvwait + 8
    506. 1  libsystem_pthread.dylib        0x806c _pthread_cond_wait + 1232
    507. 2  UnityFramework                 0x12cdf14 il2cpp::os::ConditionVariableImpl::TimedWait(il2cpp::os::FastMutexImpl*, unsigned int) + 51 (ConditionVariableImpl.cpp:51)
    508. 3  UnityFramework                 0x12c46b0 worker_thread(void*) + 87 (ThreadPoolWorkerThread.cpp:87)
    509. 4  UnityFramework                 0x12f6770 il2cpp::vm::ThreadStart(void*) + 727 (Thread.cpp:727)
    510. 5  UnityFramework                 0x12c5d30 il2cpp::os::Thread::RunWrapper(void*) + 183 (Thread.cpp:183)
    511. 6  UnityFramework                 0x12c7fe0 il2cpp::os::ThreadImpl::ThreadStartWrapper(void*) + 127 (ThreadImpl.cpp:127)
    512. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    513. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    514.  
    515. IL2CPP Threadpool worker
    516. 0  libsystem_kernel.dylib         0x167c __psynch_cvwait + 8
    517. 1  libsystem_pthread.dylib        0x806c _pthread_cond_wait + 1232
    518. 2  UnityFramework                 0x12cdf14 il2cpp::os::ConditionVariableImpl::TimedWait(il2cpp::os::FastMutexImpl*, unsigned int) + 51 (ConditionVariableImpl.cpp:51)
    519. 3  UnityFramework                 0x12c46b0 worker_thread(void*) + 87 (ThreadPoolWorkerThread.cpp:87)
    520. 4  UnityFramework                 0x12f6770 il2cpp::vm::ThreadStart(void*) + 727 (Thread.cpp:727)
    521. 5  UnityFramework                 0x12c5d30 il2cpp::os::Thread::RunWrapper(void*) + 183 (Thread.cpp:183)
    522. 6  UnityFramework                 0x12c7fe0 il2cpp::os::ThreadImpl::ThreadStartWrapper(void*) + 127 (ThreadImpl.cpp:127)
    523. 7  libsystem_pthread.dylib        0x16cc _pthread_start + 148
    524. 8  libsystem_pthread.dylib        0xba4 thread_start + 8
    As you can see the UnityGfxDeviceWorker crashes when copying the particle system.
     
  4. Meatloaf4

    Meatloaf4

    Joined:
    Jul 30, 2013
    Posts:
    183
    This is a really big issue for me and would really appreciate someone form Unity chiming in.

    Thanks in advance!
     
  5. Alan-Liu

    Alan-Liu

    Joined:
    Jan 23, 2014
    Posts:
    392
    Hi,
    I encountered a similar issue about ParticleSystem before: https://forum.unity.com/threads/uni...rticlesystemgeometryjob.1378722/#post-8789266.

    Based on the callstack of crash and your code, I created a minimal project to reproduce the issue using Unity 2020.3.47.

    Here is the code (Full project is in the attachment below):
    Code (CSharp):
    1. public class Test : MonoBehaviour
    2. {
    3.     public GameObject Prefab;
    4.     public int MaxCount;
    5.     public int BatchSize;
    6.     public int[] RandomFrameRange;
    7.  
    8.     private void Start()
    9.     {
    10.         Application.runInBackground = true;
    11.  
    12.         for (int i = 0; i < MaxCount / BatchSize; ++i)
    13.             StartCoroutine(Execute(BatchSize));
    14.     }
    15.  
    16.     private IEnumerator Execute(int batchSize)
    17.     {
    18.         var pss = new List<ParticleSystem>(batchSize);
    19.  
    20.         while (true)
    21.         {
    22.             for (int i = 0; i < batchSize; ++i)
    23.             {
    24.                 var go = Instantiate(Prefab);
    25.                 var ps = go.GetComponent<ParticleSystem>();
    26.                 pss.Add(ps);
    27.             }
    28.  
    29.             int frames = Random.Range(RandomFrameRange[0], RandomFrameRange[1]);
    30.             while (frames-- > 0)
    31.                 yield return null;
    32.  
    33.             for (int i = 0; i < batchSize; ++i)
    34.             {
    35.                 var particles = new ParticleSystem.Particle[pss[i].particleCount];
    36.                 pss[i].GetParticles(particles);
    37.             }
    38.  
    39.             frames = 5;
    40.             while (frames-- > 0)
    41.                 yield return null;
    42.  
    43.             for (int i = 0; i < batchSize; ++i)
    44.             {
    45.                 Destroy(pss[i]);
    46.             }
    47.  
    48.             pss.Clear();
    49.  
    50.             yield return null;
    51.         }
    52.     }
    53. }
    54.  
    The project can reproduce the issue in minutes on the following devices:
    • Mi 10
    • Redmi 8A
    • iPhone 6s

    I think it's an issue about race condition: some data is being created when ParticleSystem.GetParticles is called, and at the same time, ParticleSystemParticles::CopyToArrayAOS tries to use that data.

    The project has been submitted to Unity: IN-40907.
     

    Attached Files:

    Last edited: May 15, 2023
  6. Alan-Liu

    Alan-Liu

    Joined:
    Jan 23, 2014
    Posts:
    392
    As a workaround, you can try to use ParticleSystem.Simulate before calling ParticleSystem.GetParticles. ParticleSystem.Simulate will sync with render job internally, so it should avoid ParticleSystem.GetParticles and render job from running simultaneously:
    Code (CSharp):
    1. for (int i = 0; i < batchSize; ++i)
    2. {
    3.     var particles = new ParticleSystem.Particle[pss[i].particleCount];
    4.     pss[i].Simulate(0, true, false);  // <----
    5.     pss[i].GetParticles(particles);
    6. }
     
    Last edited: May 15, 2023
  7. Alan-Liu

    Alan-Liu

    Joined:
    Jan 23, 2014
    Posts:
    392