From: Seungbae Shin Date: Mon, 6 Jul 2020 10:27:59 +0000 (+0900) Subject: Add writable-size wait timeout log / Terminate write operation with accumulated timeouts X-Git-Tag: submit/tizen/20200707.101425^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F09%2F237909%2F7;p=platform%2Fcore%2Fapi%2Faudio-io.git Add writable-size wait timeout log / Terminate write operation with accumulated timeouts [Version] 0.5.28 [Issue Type] Enhancement Change-Id: Ie1f43daefd63bace231e048891197258f22c10e6 --- diff --git a/packaging/capi-media-audio-io.spec b/packaging/capi-media-audio-io.spec index f995fa6..f2e2011 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.27 +Version: 0.5.28 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/cpp/CAudioOutput.cpp b/src/cpp/CAudioOutput.cpp index a3ca983..d624c39 100644 --- a/src/cpp/CAudioOutput.cpp +++ b/src/cpp/CAudioOutput.cpp @@ -25,6 +25,7 @@ using namespace std; using namespace tizen_media_audio; static constexpr auto cond_wait_ms = 200ms; +static constexpr auto writable_timeout_s = 5s; /** * class CAudioOutput @@ -290,13 +291,23 @@ size_t CAudioOutput::write(const void* buffer, size_t length) { while (lengthIter > 0) { size_t l; + unsigned int timeouts = 0; while ((l = mpPulseAudioClient->getWritableSize()) == 0) { #ifdef _AUDIO_IO_DEBUG_TIMING_ AUDIO_IO_LOGD("writableSize is [%zu].. wait", l); #endif std::unique_lock cond_mutex(mCondMutex); - mCond.wait_for(cond_mutex, cond_wait_ms); + if (mCond.wait_for(cond_mutex, cond_wait_ms) == std::cv_status::timeout) { +//LCOV_EXCL_START + AUDIO_IO_LOGW("[%2u] timeout expired for waiting %lld ms of write available...", ++timeouts, + std::chrono::duration_cast(cond_wait_ms).count()); + if ((cond_wait_ms * timeouts) > writable_timeout_s) + THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INTERNAL_OPERATION, + "writable size is 0 for more than %lld seconds...", + std::chrono::duration_cast(writable_timeout_s).count()); +//LCOV_EXCL_STOP + } } if (l > lengthIter)