ItsBexy / CrossUp

8 stars 2 forks source link

Crash on exiting #28

Open hunter2actual opened 5 months ago

hunter2actual commented 5 months ago

While exiting FFXIV, the game crashed. This does not happen every time I close the game, so far it was just this once. The end of my dalamud.log is filled with CrossUp stacktraces so I thought you might want to see them. If not, feel free to close.

I'm using CrossUp v1.0.1.5

2024-04-04 21:19:29.258 +01:00 [INF] [LOCALPLUGIN] Finished unloading YesAlready.dll
2024-04-04 21:19:29.258 +01:00 [INF] [LOCALPLUGIN] Unloading Honorific.dll
2024-04-04 21:19:29.264 +01:00 [INF] [LOCALPLUGIN] Finished unloading Honorific.dll
2024-04-04 21:19:29.264 +01:00 [INF] [LOCALPLUGIN] Unloading TitleEdit.dll
2024-04-04 21:19:29.265 +01:00 [INF] [LOCALPLUGIN] Finished unloading TitleEdit.dll
2024-04-04 21:19:29.265 +01:00 [INF] [LOCALPLUGIN] Unloading CrossUp.dll
2024-04-04 21:19:29.270 +01:00 [WRN] [CrossUp] Exception on Dispose: Couldn't reset Cross Hotbar layout!
System.NullReferenceException: Object reference not set to an instance of an object.
   at CrossUp.Features.Layout.Layout.Update(Boolean forceArrange, Boolean resetAll) in /work/repo/Features/Layout/Layout.cs:line 22
   at CrossUp.CrossUp.Dispose() in /work/repo/CrossUp.cs:line 75
2024-04-04 21:19:29.271 +01:00 [WRN] [CrossUp] Node is null and has no children 
   at CrossUp.Utility.NodeWrapper.get_Item(UInt32 id)
   at CrossUp.Features.Layout.Cross.Reset()
   at CrossUp.Features.Layout.Layout.Reset()
   at CrossUp.CrossUp.Dispose()
   at Dalamud.Game.Framework.RunOnFrameworkThread(Action action)
   at Dalamud.Plugin.Internal.Types.LocalPlugin.UnloadAsync(Boolean reloading, Boolean waitBeforeLoaderDispose)
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
   at Dalamud.Plugin.Internal.Types.LocalPlugin.UnloadAsync(Boolean reloading, Boolean waitBeforeLoaderDispose)
   at Dalamud.Plugin.Internal.PluginManager.Dalamud.IInternalDisposableService.DisposeService()
   at Dalamud.Service`1.Unset()
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
   at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
   at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
   at System.Type.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args)
   at Dalamud.ServiceManager.UnloadAllServices()
   at Dalamud.EntryPoint.RunThread(DalamudStartInfo info, IntPtr mainThreadContinueEvent)
   at Dalamud.EntryPoint.<>c__DisplayClass3_0.<Initialize>b__0()

2024-04-04 21:19:29.272 +01:00 [WRN] [CrossUp] Exception on Dispose: Couldn't reset Action Bars!
System.IndexOutOfRangeException: Index was outside the bounds of the array.
   at CrossUp.Game.Hotbar.Bars.ActionBar.get_Root() in /work/repo/Game/Hotbar/Bars.cs:line 192
   at CrossUp.Features.Layout.SeparateEx.ResetBar(Int32 barID, Int32 job) in /work/repo/Features/Layout/SeparateEx.cs:line 296
   at CrossUp.Features.Layout.SeparateEx.Reset() in /work/repo/Features/Layout/SeparateEx.cs:line 285
   at CrossUp.CrossUp.Dispose() in /work/repo/CrossUp.cs:line 76
2024-04-04 21:19:29.272 +01:00 [WRN] [CrossUp] Node is null and has no children 
   at CrossUp.Utility.NodeWrapper.get_Item(UInt32 id)
   at CrossUp.Features.Color.SetPulse(Boolean reset)
   at CrossUp.CrossUp.Dispose()
   at Dalamud.Game.Framework.RunOnFrameworkThread(Action action)
   at Dalamud.Plugin.Internal.Types.LocalPlugin.UnloadAsync(Boolean reloading, Boolean waitBeforeLoaderDispose)
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
   at Dalamud.Plugin.Internal.Types.LocalPlugin.UnloadAsync(Boolean reloading, Boolean waitBeforeLoaderDispose)
   at Dalamud.Plugin.Internal.PluginManager.Dalamud.IInternalDisposableService.DisposeService()
   at Dalamud.Service`1.Unset()
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
   at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
   at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
   at System.Type.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args)
   at Dalamud.ServiceManager.UnloadAllServices()
   at Dalamud.EntryPoint.RunThread(DalamudStartInfo info, IntPtr mainThreadContinueEvent)
   at Dalamud.EntryPoint.<>c__DisplayClass3_0.<Initialize>b__0()

2024-04-04 21:19:29.272 +01:00 [WRN] [CrossUp] Node is null and has no children 
   at CrossUp.Utility.NodeWrapper.get_Item(UInt32 id)
   at CrossUp.Features.Color.SetPulse(Boolean reset)
   at CrossUp.CrossUp.Dispose()
   at Dalamud.Game.Framework.RunOnFrameworkThread(Action action)
   at Dalamud.Plugin.Internal.Types.LocalPlugin.UnloadAsync(Boolean reloading, Boolean waitBeforeLoaderDispose)
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
   at Dalamud.Plugin.Internal.Types.LocalPlugin.UnloadAsync(Boolean reloading, Boolean waitBeforeLoaderDispose)
   at Dalamud.Plugin.Internal.PluginManager.Dalamud.IInternalDisposableService.DisposeService()
   at Dalamud.Service`1.Unset()
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
   at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
   at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
   at System.Type.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args)
   at Dalamud.ServiceManager.UnloadAllServices()
   at Dalamud.EntryPoint.RunThread(DalamudStartInfo info, IntPtr mainThreadContinueEvent)
   at Dalamud.EntryPoint.<>c__DisplayClass3_0.<Initialize>b__0()

After this, the last [WRN] [CrossUp] Node is null and has no children trace repeats around 60 times, then the log file ends.

ItsBexy commented 5 months ago

Thanks for the heads-up! Were you logged in or logged out when you exited the game? That could help me narrow it down.

It looks like the plugin was trying to run its cleanup functions on UI elements that no longer existed at the time of disposal. Which is strange, because the plugin already checks for that. I'll see if I can work out what's up.

hunter2actual commented 5 months ago

I was logged in, in the Gold Saucer and I used the "exit game" function from the system menu.