Add new flag to check server disconnection 90/217090/1 accepted/tizen/unified/20191107.051427 submit/tizen/20191106.074106
authorJeongmo Yang <jm80.yang@samsung.com>
Wed, 6 Nov 2019 05:08:51 +0000 (14:08 +0900)
committerJeongmo Yang <jm80.yang@samsung.com>
Wed, 6 Nov 2019 07:35:07 +0000 (16:35 +0900)
[Version] 0.5.44
[Profile] Common
[Issue Type] Error handling

Change-Id: I2fae80fc122fc933b37401c45db8c5e665d42c84
Signed-off-by: Jeongmo Yang <jm80.yang@samsung.com>
include/sound_manager_private.h
packaging/capi-media-sound-manager.spec
src/sound_manager.c
src/sound_manager_private.c

index 7792769..7f32c30 100644 (file)
@@ -199,6 +199,7 @@ typedef struct _sound_pa_info_s {
        pa_threaded_mainloop *mainloop;
        pa_context *context;
        unsigned int index;
+       bool is_disconnected;
 } sound_pa_info_s;
 
 typedef struct _preferred_device_info_s {
index 6f1eb69..ecdda42 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-sound-manager
 Summary:    Sound Manager library
-Version:    0.5.43
+Version:    0.5.44
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index 0279a49..acadaa0 100644 (file)
@@ -1249,9 +1249,13 @@ int sound_manager_destroy_stream_ducking(sound_stream_ducking_h stream_ducking)
 
        SM_INSTANCE_CHECK(ducking);
 
-       ret = _get_ducking_state(ducking->pa_info.index, &is_ducked);
-       if (ret != MM_ERROR_NONE)
-               return _convert_sound_manager_error_code(__func__, ret);
+       if (ducking->pa_info.is_disconnected == false) {
+               ret = _get_ducking_state(ducking->pa_info.index, &is_ducked);
+               if (ret != MM_ERROR_NONE)
+                       return _convert_sound_manager_error_code(__func__, ret);
+       } else {
+               LOGW("disconnected handle. destroy it.");
+       }
 
        SM_ENTER_CRITICAL_SECTION_WITH_RETURN(&ducking_mutex, SOUND_MANAGER_ERROR_INTERNAL);
 
index 30cce96..3d29f7a 100644 (file)
@@ -818,7 +818,14 @@ void _pa_context_state_cb(pa_context *c, void *userdata)
        assert(c);
 
        state = pa_context_get_state(c);
+
        LOGI("[%p] context state = [%d]", pa_info, state);
+
+       if (state == PA_CONTEXT_FAILED) {
+               pa_info->is_disconnected = true;
+               LOGE("PA DISCONNECTED");
+       }
+
        switch (state) {
        case PA_CONTEXT_READY:
        case PA_CONTEXT_TERMINATED: