From e611d7a8fd01e793c6cc3add28e60f17e1ebe851 Mon Sep 17 00:00:00 2001 From: advplyr Date: Tue, 23 Aug 2022 18:10:06 -0500 Subject: [PATCH] Update:Local session sync lock to prevent duplicate inserts --- server/managers/PlaybackSessionManager.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/server/managers/PlaybackSessionManager.js b/server/managers/PlaybackSessionManager.js index 9d358719..b5cf4152 100644 --- a/server/managers/PlaybackSessionManager.js +++ b/server/managers/PlaybackSessionManager.js @@ -19,6 +19,7 @@ class PlaybackSessionManager { this.clientEmitter = clientEmitter this.sessions = [] + this.localSessionLock = {} } getSession(sessionId) { @@ -58,12 +59,19 @@ class PlaybackSessionManager { } async syncLocalSessionRequest(user, sessionJson, res) { + if (this.localSessionLock[sessionJson.id]) { + Logger.debug(`[PlaybackSessionManager] syncLocalSessionRequest: Local session is locked and already syncing`) + return res.sendStatus(200) + } + var libraryItem = this.db.getLibraryItem(sessionJson.libraryItemId) if (!libraryItem) { Logger.error(`[PlaybackSessionManager] syncLocalSessionRequest: Library item not found for session "${sessionJson.libraryItemId}"`) return res.sendStatus(200) } + this.localSessionLock[sessionJson.id] = true // Lock local session + var session = await this.db.getPlaybackSession(sessionJson.id) if (!session) { // New session from local @@ -94,6 +102,9 @@ class PlaybackSessionManager { data: itemProgress.toJSON() }) } + + delete this.localSessionLock[sessionJson.id] // Unlock local session + res.sendStatus(200) }