Skip waiting of disconnection for the invalid stream when stopping the virtual stream 43/265843/2 accepted/tizen/unified/20211102.024829 submit/tizen/20211101.022230
authorSeungbae Shin <seungbae.shin@samsung.com>
Fri, 29 Oct 2021 11:44:03 +0000 (20:44 +0900)
committerSeungbae Shin <seungbae.shin@samsung.com>
Mon, 1 Nov 2021 04:34:29 +0000 (13:34 +0900)
[Version] 0.6.38
[Issue Type] Bug fix

Change-Id: I84a5a2d1f4896f4d22346818687944d27fb2990e

packaging/capi-media-sound-manager.spec
src/sound_manager_private.c

index 95879b8..41b2638 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-sound-manager
 Summary:    Sound Manager library
-Version:    0.6.37
+Version:    0.6.38
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 53e9c39..b27dcdd 100644 (file)
@@ -3115,6 +3115,7 @@ ERROR_WITH_UNLOCK:
 int _stop_virtual_stream(virtual_sound_stream_info_s *virtual_stream)
 {
        int i = 0;
+       int ret = 0;
 
        SM_ARG_CHECK(virtual_stream);
        SM_STATE_CHECK(virtual_stream, _VSTREAM_STATE_RUNNING);
@@ -3122,21 +3123,28 @@ int _stop_virtual_stream(virtual_sound_stream_info_s *virtual_stream)
        pa_threaded_mainloop_lock(virtual_stream->pa_mainloop);
 
        for (i = 0; i < SOUND_STREAM_DIRECTION_MAX; i++) {
-               if (virtual_stream->pa_stream[i]) {
-                       pa_stream_disconnect(virtual_stream->pa_stream[i]);
+               if (!virtual_stream->pa_stream[i])
+                       continue;
+
+               LOGI("[%d] disconnecting vstream_h[%p] index[%d] state[%d]",
+                        i, virtual_stream, pa_stream_get_index(virtual_stream->pa_stream[i]), pa_stream_get_state(virtual_stream->pa_stream[i]));
 
+               ret = pa_stream_disconnect(virtual_stream->pa_stream[i]);
+               if (ret == 0) {
                        /* wait for terminated state of the stream */
                        for (;;) {
-                               pa_stream_state_t state;
-                               state = pa_stream_get_state(virtual_stream->pa_stream[i]);
+                               pa_stream_state_t state = pa_stream_get_state(virtual_stream->pa_stream[i]);
                                if (state == PA_STREAM_TERMINATED)
                                        break;
                                pa_threaded_mainloop_wait(virtual_stream->pa_mainloop);
                        }
-
-                       pa_stream_unref(virtual_stream->pa_stream[i]);
-                       virtual_stream->pa_stream[i] = NULL;
+               } else {
+                       LOGE("[%d] disconnection failed for vstream_h[%p] index[%d], ret[%d][%s]",
+                                i, virtual_stream, pa_stream_get_index(virtual_stream->pa_stream[i]), ret, pa_strerror(ret));
                }
+
+               pa_stream_unref(virtual_stream->pa_stream[i]);
+               virtual_stream->pa_stream[i] = NULL;
        }
 
        pa_threaded_mainloop_unlock(virtual_stream->pa_mainloop);