diff --git a/mediaplayer/src/jvmMain/kotlin/io/github/kdroidfilter/composemediaplayer/linux/LinuxVideoPlayerState.kt b/mediaplayer/src/jvmMain/kotlin/io/github/kdroidfilter/composemediaplayer/linux/LinuxVideoPlayerState.kt index bb7d8ec5..5e094ec1 100644 --- a/mediaplayer/src/jvmMain/kotlin/io/github/kdroidfilter/composemediaplayer/linux/LinuxVideoPlayerState.kt +++ b/mediaplayer/src/jvmMain/kotlin/io/github/kdroidfilter/composemediaplayer/linux/LinuxVideoPlayerState.kt @@ -713,9 +713,8 @@ class LinuxVideoPlayerState : VideoPlayerState { } override fun clearError() { - runBlocking { - withContext(Dispatchers.Main) { error = null } - } + // Snapshot state can be written from any thread; blocking on Main deadlocked when called from the UI thread. + error = null } override fun toggleFullscreen() { diff --git a/mediaplayer/src/jvmMain/kotlin/io/github/kdroidfilter/composemediaplayer/windows/WindowsVideoPlayerState.kt b/mediaplayer/src/jvmMain/kotlin/io/github/kdroidfilter/composemediaplayer/windows/WindowsVideoPlayerState.kt index a2eb89e7..ce571259 100644 --- a/mediaplayer/src/jvmMain/kotlin/io/github/kdroidfilter/composemediaplayer/windows/WindowsVideoPlayerState.kt +++ b/mediaplayer/src/jvmMain/kotlin/io/github/kdroidfilter/composemediaplayer/windows/WindowsVideoPlayerState.kt @@ -194,7 +194,7 @@ class WindowsVideoPlayerState : VideoPlayerState { } } - private var _error: VideoPlayerError? = null + private var _error: VideoPlayerError? by mutableStateOf(null) override val error get() = _error override fun clearError() { @@ -498,6 +498,8 @@ class WindowsVideoPlayerState : VideoPlayerState { mediaOperationMutex.withLock { try { isLoading = true + // An error from a previous source must not stick to this one. + clearError() // Stop playback and release existing resources val wasPlaying = _isPlaying