From d3bc8fca6496ac4dbcb57d6c9c443b2c59c435c6 Mon Sep 17 00:00:00 2001 From: JimiC Date: Thu, 22 Oct 2015 11:47:29 +0300 Subject: [PATCH] Fixed issue #33 where multiple apps startup causes exception to be thrown due to multiple session saving race. --- .../AutoMeasurement/BaseAutoMeasurement.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Source/CSharpAnalytics/AutoMeasurement/BaseAutoMeasurement.cs b/Source/CSharpAnalytics/AutoMeasurement/BaseAutoMeasurement.cs index ea0aa7e..15e33ee 100644 --- a/Source/CSharpAnalytics/AutoMeasurement/BaseAutoMeasurement.cs +++ b/Source/CSharpAnalytics/AutoMeasurement/BaseAutoMeasurement.cs @@ -69,12 +69,16 @@ public async void Start(MeasurementConfiguration configuration, string launchKin sessionManager = new SessionManager(sessionState, configuration.SampleRate); await StartRequesterAsync(); - if (delayedOptOut != null) SetOptOut(delayedOptOut.Value); + // Preserve 'delayedOptOut' value to use in condition checking + var hasDelayedOptOut = delayedOptOut; + if (hasDelayedOptOut.HasValue) SetOptOut(delayedOptOut.GetValueOrDefault()); Client.Configure(configuration, sessionManager, GetEnvironment(), Add); // Sometimes apps crash so preserve at least session number and visitor id on launch - await Save(sessionManager.GetState(), SessionStorageName); + // Avoid re-saving if a delayed optout was set (save already occurred in 'SetOptOut') + if (!hasDelayedOptOut.HasValue) + await Save(sessionManager.GetState(), SessionStorageName); HookEvents(); }