diff --git a/mobile/patches/expo-video+2.0.6.patch b/mobile/patches/expo-video+2.0.6.patch index d8261bf..2f9338a 100644 --- a/mobile/patches/expo-video+2.0.6.patch +++ b/mobile/patches/expo-video+2.0.6.patch @@ -1,4 +1,5 @@ diff --git a/node_modules/expo-video/android/src/main/java/expo/modules/video/playbackService/ExpoVideoPlaybackService.kt b/node_modules/expo-video/android/src/main/java/expo/modules/video/playbackService/ExpoVideoPlaybackService.kt +index cd798cf..8cb6dfb 100644 --- a/node_modules/expo-video/android/src/main/java/expo/modules/video/playbackService/ExpoVideoPlaybackService.kt +++ b/node_modules/expo-video/android/src/main/java/expo/modules/video/playbackService/ExpoVideoPlaybackService.kt @@ -26,7 +26,7 @@ class PlaybackServiceBinder(val service: ExpoVideoPlaybackService) : Binder() @@ -10,7 +11,7 @@ diff --git a/node_modules/expo-video/android/src/main/java/expo/modules/video/pl private val binder = PlaybackServiceBinder(this) private val commandSeekForward = SessionCommand(SEEK_FORWARD_COMMAND, Bundle.EMPTY) -@@ -136,10 +136,17 @@ class ExpoVideoPlaybackService : MediaSessionService() { +@@ -136,10 +136,20 @@ class ExpoVideoPlaybackService : MediaSessionService() { private fun cleanup() { hideAllNotifications() @@ -21,7 +22,10 @@ diff --git a/node_modules/expo-video/android/src/main/java/expo/modules/video/pl + // Mapa jest ConcurrentHashMap (patrz deklaracja), bo sama kopia tez iteruje mape, + // a wpisy znikaja z innego watku przy zwalnianiu playera: na LinkedHashMap `toList()` + // wywalalo sie wtedy tak samo (Goon 0.4.1, Sentry GOON-6W, 2026-09-17). -+ val sessions = mediaSessions.values.toList() ++ // ArrayList(values), nie `toList()`: toList przy rozmiarze 1 robi iterator().next(), ++ // a wpis moze zniknac miedzy size() i next() -> NoSuchElementException (Goon 0.4.2, ++ // Sentry GOON-72). Konstruktor idzie przez toArray(), ktore mapa robi bezpiecznie. ++ val sessions = ArrayList(mediaSessions.values) + mediaSessions.clear() + sessions.forEach { session -> session.release()