From 94fa5789f50bba513ee38f994263ee579881a3dc Mon Sep 17 00:00:00 2001 From: Fabian Freund Date: Wed, 21 Jan 2026 05:57:07 +0100 Subject: [PATCH] fix container assignment issue --- .../geckoview/domain/repositories/tab.dart | 15 +++++++++++++++ .../geckoview/domain/repositories/tab.g.dart | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/lib/features/geckoview/domain/repositories/tab.dart b/app/lib/features/geckoview/domain/repositories/tab.dart index cb5a0f25..30c31c6c 100644 --- a/app/lib/features/geckoview/domain/repositories/tab.dart +++ b/app/lib/features/geckoview/domain/repositories/tab.dart @@ -46,6 +46,11 @@ class TabRepository extends _$TabRepository { final _tabFromIntent = {}; + /// Tracks tabs currently being processed for container assignment to prevent + /// concurrent processing of the same tab (race condition protection) + /// See: https://github.com/FaFre/WebLibre/issues/139 + final _tabsBeingProcessedForAssignment = {}; + bool hasLaunchedFromIntent(String? tabId) { if (tabId == null) { return false; @@ -434,6 +439,16 @@ class TabRepository extends _$TabRepository { event, ) async { if (event.tabId != null) { + // Prevent concurrent processing of the same tab (race condition protection) + if (_tabsBeingProcessedForAssignment.contains(event.tabId)) { + logger.d( + 'Skipping container assignment for tab ${event.tabId} - already being processed', + ); + return; + } + + _tabsBeingProcessedForAssignment.add(event.tabId!); + // ignore: only_use_keep_alive_inside_keep_alive final tabState = ref.read(tabStateProvider(event.tabId)); if (tabState != null) { diff --git a/app/lib/features/geckoview/domain/repositories/tab.g.dart b/app/lib/features/geckoview/domain/repositories/tab.g.dart index 872fd081..6964b7b8 100644 --- a/app/lib/features/geckoview/domain/repositories/tab.g.dart +++ b/app/lib/features/geckoview/domain/repositories/tab.g.dart @@ -41,7 +41,7 @@ final class TabRepositoryProvider } } -String _$tabRepositoryHash() => r'93afd4b4b6d007f02707bda0b860730b0dba5c5f'; +String _$tabRepositoryHash() => r'763f5ea734abc854dfdc0c08d3f266fbd94bf931'; abstract class _$TabRepository extends $Notifier { void build();