diff --git a/firebase-sessions/CHANGELOG.md b/firebase-sessions/CHANGELOG.md index 7147a6bf504..48987a62df5 100644 --- a/firebase-sessions/CHANGELOG.md +++ b/firebase-sessions/CHANGELOG.md @@ -1,5 +1,6 @@ # Unreleased +* [fixed] Make AQS resilient to background init in multi-process apps. # 2.0.7 * [fixed] Removed extraneous logs that risk leaking internal identifiers. diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionLifecycleService.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionLifecycleService.kt index a900fcd95c1..e0f3720b8d7 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionLifecycleService.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionLifecycleService.kt @@ -127,10 +127,16 @@ internal class SessionLifecycleService : Service() { /** Generates a new session id and sends it everywhere it's needed */ private fun newSession() { - SessionGenerator.instance.generateNewSession() - Log.d(TAG, "Generated new session.") - broadcastSession() - SessionDatastore.instance.updateSessionId(SessionGenerator.instance.currentSession.sessionId) + try { + SessionGenerator.instance.generateNewSession() + Log.d(TAG, "Generated new session.") + broadcastSession() + SessionDatastore.instance.updateSessionId( + SessionGenerator.instance.currentSession.sessionId + ) + } catch (ex: IllegalStateException) { + Log.w(TAG, "Failed to generate new session.", ex) + } } /** @@ -149,10 +155,14 @@ internal class SessionLifecycleService : Service() { if (hasForegrounded) { sendSessionToClient(client, SessionGenerator.instance.currentSession.sessionId) } else { - // Send the value from the datastore before the first foregrounding it exists - val storedSession = SessionDatastore.instance.getCurrentSessionId() - Log.d(TAG, "App has not yet foregrounded. Using previously stored session.") - storedSession?.let { sendSessionToClient(client, it) } + try { + // Send the value from the datastore before the first foregrounding it exists + val storedSession = SessionDatastore.instance.getCurrentSessionId() + Log.d(TAG, "App has not yet foregrounded. Using previously stored session.") + storedSession?.let { sendSessionToClient(client, it) } + } catch (ex: IllegalStateException) { + Log.w(TAG, "Failed to send session to client.", ex) + } } }