Add writable-size wait timeout log / Terminate write operation with accumulated timeouts 09/237909/7 submit/tizen/20200707.101425
authorSeungbae Shin <seungbae.shin@samsung.com>
Mon, 6 Jul 2020 10:27:59 +0000 (19:27 +0900)
committerSeungbae Shin <seungbae.shin@samsung.com>
Tue, 7 Jul 2020 05:13:45 +0000 (14:13 +0900)
[Version] 0.5.28
[Issue Type] Enhancement

Change-Id: Ie1f43daefd63bace231e048891197258f22c10e6

packaging/capi-media-audio-io.spec
src/cpp/CAudioOutput.cpp

index f995fa6..f2e2011 100644 (file)
@@ -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
index a3ca983..d624c39 100644 (file)
@@ -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<std::mutex> 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<std::chrono::milliseconds>(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<std::chrono::seconds>(writable_timeout_s).count());
+//LCOV_EXCL_STOP
+                }
             }
 
             if (l > lengthIter)