From 9d92406591676cf48a4e597b02c6fbe1ef779f53 Mon Sep 17 00:00:00 2001 From: Jonas Lincoln Date: Fri, 27 Dec 2024 08:21:46 +0100 Subject: [PATCH] Delay dispose of CancellationTokenSource when quitting Quitting in Unity fires a number of events and callbacks. `MonoBehaviour.OnApplicationQuit` is called before `Application.wantsToQuit` which leads to undesired behaviour. `Application.wantsToQuit` can be used to interrupt a quit process, so you can shut down gracefully. If this is utilized, the AgonesSDK has already dispose the cancellation token and future calls will fail. Reference: https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Application-wantsToQuit.html Same solution as in UniRX: https://github.com/neuecc/UniRx/pull/463 --- sdks/unity/AgonesSdk.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sdks/unity/AgonesSdk.cs b/sdks/unity/AgonesSdk.cs index e202110823..64fb71d7cc 100644 --- a/sdks/unity/AgonesSdk.cs +++ b/sdks/unity/AgonesSdk.cs @@ -71,6 +71,7 @@ private void Awake() { String port = Environment.GetEnvironmentVariable("AGONES_SDK_HTTP_PORT"); sidecarAddress = "http://localhost:" + (port ?? "9358"); + Application.quitting += OnApplicationQuitting; } private void Start() @@ -79,10 +80,15 @@ private void Start() HealthCheckAsync(); } - private void OnApplicationQuit() + private void OnApplicationQuitting() { cancellationTokenSource.Dispose(); } + + private void OnDestroy() + { + Application.quitting -= OnApplicationQuitting; + } #endregion #region AgonesRestClient Public Methods