From 3cc85825fd1d541a9a440c32809e2b3d7ec9d5b6 Mon Sep 17 00:00:00 2001 From: Sangchul Lee Date: Mon, 15 Jan 2018 17:02:59 +0900 Subject: [PATCH] Revise CPulseAudioClient::finalize() to free all the resources which have been already used A failure can be happened during initialize(), we do not lean on the __mIsInit member variable which is only set on the last stage of the initialize() function. [Version] 0.5.1 [Issue Type] Bug Fix Change-Id: I906365647ea08fd27e5c72562fb59f94c2b77b96 Signed-off-by: Sangchul Lee --- packaging/capi-media-audio-io.spec | 2 +- src/cpp/CPulseAudioClient.cpp | 23 +++++++++++------------ 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/packaging/capi-media-audio-io.spec b/packaging/capi-media-audio-io.spec index 3af7e2a..3cfb628 100644 --- a/packaging/capi-media-audio-io.spec +++ b/packaging/capi-media-audio-io.spec @@ -1,6 +1,6 @@ Name: capi-media-audio-io Summary: An Audio Input & Audio Output library in Tizen Native API -Version: 0.5.0 +Version: 0.5.1 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/cpp/CPulseAudioClient.cpp b/src/cpp/CPulseAudioClient.cpp index bd123bb..288a02e 100644 --- a/src/cpp/CPulseAudioClient.cpp +++ b/src/cpp/CPulseAudioClient.cpp @@ -446,22 +446,21 @@ void CPulseAudioClient::initialize() { void CPulseAudioClient::finalize() { AUDIO_IO_LOGD(""); - if (__mIsInit == false) { - return; - } - if (isInThread() == false) + if (__mpMainloop && isInThread() == false) pa_threaded_mainloop_lock(__mpMainloop); /* clear callbacks */ - if (__mDirection == EStreamDirection::STREAM_DIRECTION_PLAYBACK) - pa_stream_set_write_callback(__mpStream, NULL, NULL); - else - pa_stream_set_read_callback(__mpStream, NULL, NULL); - pa_stream_set_latency_update_callback(__mpStream, NULL, NULL); - pa_stream_set_event_callback(__mpStream, NULL, NULL); - - if (isInThread() == false) + if (__mpStream) { + if (__mDirection == EStreamDirection::STREAM_DIRECTION_PLAYBACK) + pa_stream_set_write_callback(__mpStream, NULL, NULL); + else + pa_stream_set_read_callback(__mpStream, NULL, NULL); + pa_stream_set_latency_update_callback(__mpStream, NULL, NULL); + pa_stream_set_event_callback(__mpStream, NULL, NULL); + } + + if (__mpMainloop && isInThread() == false) pa_threaded_mainloop_unlock(__mpMainloop); /* Wait for drain complete if draining before finalize */ -- 2.7.4