From cf2513ac150fc67533d6c41e9e44ec894d81ca0e Mon Sep 17 00:00:00 2001 From: James Frowen Date: Sat, 6 Aug 2022 12:32:11 +0100 Subject: [PATCH] fix: fixing crash when closing unity using unity Json too late causes crash, so using quitting instead --- Assets/Mirage.Profiler/Editor/SavedData.cs | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/Assets/Mirage.Profiler/Editor/SavedData.cs b/Assets/Mirage.Profiler/Editor/SavedData.cs index 5022bac..ba9ae88 100644 --- a/Assets/Mirage.Profiler/Editor/SavedData.cs +++ b/Assets/Mirage.Profiler/Editor/SavedData.cs @@ -3,6 +3,7 @@ using System.IO; using Mirage.NetworkProfiler.ModuleGUI.Messages; using Mirage.NetworkProfiler.ModuleGUI.UITable; +using UnityEditor; using UnityEngine; namespace Mirage.NetworkProfiler.ModuleGUI @@ -80,11 +81,27 @@ internal class SaveDataLoader private SaveDataLoader() { NetworkProfilerRecorder.AfterSample += AfterSample; + EditorApplication.quitting += quitting; + } + + private void quitting() + { + Console.WriteLine("[Mirage.Profiler] quitting"); + // save and clear references when quitting, + // this is needed because finialize is called after unity dll unloads so causes crash + SaveBoth(); + _receiveData = null; + _sentData = null; } ~SaveDataLoader() { NetworkProfilerRecorder.AfterSample -= AfterSample; + SaveBoth(); + } + + private void SaveBoth() + { if (_receiveData != null) Save(GetFullPath("Receive"), _receiveData); @@ -158,7 +175,7 @@ public static string GetFullPath(string name) public static void Save(string path, SavedData data) { - // Debug.Log($"Save {path}"); + Console.WriteLine($"[Mirage.Profiler] Save {path}"); CheckDir(path); var text = JsonUtility.ToJson(data); @@ -167,7 +184,7 @@ public static void Save(string path, SavedData data) public static SavedData Load(string path) { - // Debug.Log($"Load {path}"); + Console.WriteLine($"[Mirage.Profiler] Load {path}"); CheckDir(path); if (File.Exists(path))