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);
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);