From 6d7c04d444acba80f7e81afa5b2fb67fadeda4ed Mon Sep 17 00:00:00 2001 From: Jay Cho Date: Sun, 24 May 2026 20:12:40 +0900 Subject: [PATCH] [Tizen.Multimedia.AudioIO] Narrow Dispose() catch block instead of swallowing all exceptions AudioCaptureBase.Dispose(bool) and AudioPlayback.Dispose(bool) wrapped the cleanup call to Unprepare() in an unconditional 'catch (Exception)' with an empty body. That hid every fault, including critical native exceptions, with no log trace. Narrow the silent path to the two cases that are normal during teardown (ObjectDisposedException and InvalidOperationException) and route any other exception to Log.Error so unexpected failures stay visible in dlog. ObjectDisposedException is listed first because it derives from InvalidOperationException. Dispose() still does not rethrow, so external behavior and the Dispose(bool) contract are unchanged. Public API is unchanged. Fixes #7610 --- src/Tizen.Multimedia.AudioIO/AudioIO/AudioCapture.cs | 11 ++++++++++- src/Tizen.Multimedia.AudioIO/AudioIO/AudioPlayback.cs | 11 ++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/Tizen.Multimedia.AudioIO/AudioIO/AudioCapture.cs b/src/Tizen.Multimedia.AudioIO/AudioIO/AudioCapture.cs index b924a996ed2..cac78e599fb 100644 --- a/src/Tizen.Multimedia.AudioIO/AudioIO/AudioCapture.cs +++ b/src/Tizen.Multimedia.AudioIO/AudioIO/AudioCapture.cs @@ -132,8 +132,17 @@ protected virtual void Dispose(bool disposing) { Unprepare(); } - catch (Exception) + catch (ObjectDisposedException) { + // Expected during shutdown races. + } + catch (InvalidOperationException) + { + // Expected if the underlying handle has already been torn down. + } + catch (Exception ex) + { + Log.Error(GetType().Name, $"Unexpected error during Dispose: {ex}"); } } diff --git a/src/Tizen.Multimedia.AudioIO/AudioIO/AudioPlayback.cs b/src/Tizen.Multimedia.AudioIO/AudioIO/AudioPlayback.cs index a56a60146eb..fbcfd6eeadd 100644 --- a/src/Tizen.Multimedia.AudioIO/AudioIO/AudioPlayback.cs +++ b/src/Tizen.Multimedia.AudioIO/AudioIO/AudioPlayback.cs @@ -169,8 +169,17 @@ protected virtual void Dispose(bool disposing) { Unprepare(); } - catch (Exception) + catch (ObjectDisposedException) { + // Expected during shutdown races. + } + catch (InvalidOperationException) + { + // Expected if the underlying handle has already been torn down. + } + catch (Exception ex) + { + Log.Error(GetType().Name, $"Unexpected error during Dispose: {ex}"); } }