fixup! Check state before acquiring/releasing focus 96/133896/1 submit/tizen/20170614.045837
authorSangchul Lee <sc11.lee@samsung.com>
Wed, 14 Jun 2017 02:42:05 +0000 (11:42 +0900)
committerSangchul Lee <sc11.lee@samsung.com>
Wed, 14 Jun 2017 02:42:51 +0000 (11:42 +0900)
[Version] 0.4.6
[Issue Type] Bug fix

Change-Id: Ib55f011d9968f28b58058887bbd966001415b5b1
Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
packaging/capi-media-sound-manager.spec
src/sound_manager.c

index 6dff7a4..92cecae 100644 (file)
@@ -1,6 +1,6 @@
 Name:       capi-media-sound-manager
 Summary:    Sound Manager library
-Version:    0.4.5
+Version:    0.4.6
 Release:    0
 Group:      Multimedia/API
 License:    Apache-2.0
index b63c308..b255243 100644 (file)
@@ -369,12 +369,16 @@ int sound_manager_get_focus_reacquisition(sound_stream_info_h stream_info, bool
 int sound_manager_acquire_focus(sound_stream_info_h stream_info, sound_stream_focus_mask_e focus_mask, int sound_behavior, const char *extra_info)
 {
        int ret = MM_ERROR_NONE;
+       bool is_focus_cb_thread = false;
        sound_stream_info_s *stream_h = (sound_stream_info_s*)stream_info;
 
        LOGI(">> enter");
 
        SM_INSTANCE_CHECK(stream_h);
 
+       if ((ret = mm_sound_focus_is_cb_thread(&is_focus_cb_thread)))
+               return _convert_sound_manager_error_code(__func__, ret);
+
        if (stream_h->is_focus_unavailable) {
                LOGE("acquiring focus is not allowed for this strema type(%s)", stream_h->stream_type);
                return _convert_sound_manager_error_code(__func__, MM_ERROR_POLICY_INTERNAL);
@@ -385,9 +389,13 @@ int sound_manager_acquire_focus(sound_stream_info_h stream_info, sound_stream_fo
                return _convert_sound_manager_error_code(__func__, MM_ERROR_POLICY_INTERNAL);
        }
 
-       if ((stream_h->acquired_focus & focus_mask) || (stream_h->prev_acquired_focus & focus_mask)) {
-               LOGE("invalid state : focus_mask[0x%x], acquired_focus[0x%x], prev[0x%x]",
-                       focus_mask, stream_h->acquired_focus, stream_h->prev_acquired_focus);
+       if (is_focus_cb_thread && (stream_h->prev_acquired_focus & focus_mask)) {
+               LOGE("invalid state: focus_mask[0x%x], prev_acquired_focus[0x%x]", focus_mask, stream_h->prev_acquired_focus);
+               return _convert_sound_manager_error_code(__func__, MM_ERROR_SOUND_INVALID_STATE);
+       }
+
+       if (stream_h->acquired_focus & focus_mask) {
+               LOGE("invalid state: focus_mask[0x%x], acquired_focus[0x%x]", focus_mask, stream_h->acquired_focus);
                return _convert_sound_manager_error_code(__func__, MM_ERROR_SOUND_INVALID_STATE);
        }
 
@@ -404,15 +412,23 @@ int sound_manager_acquire_focus(sound_stream_info_h stream_info, sound_stream_fo
 int sound_manager_release_focus(sound_stream_info_h stream_info, sound_stream_focus_mask_e focus_mask, int sound_behavior, const char *extra_info)
 {
        int ret = MM_ERROR_NONE;
+       bool is_focus_cb_thread = false;
        sound_stream_info_s *stream_h = (sound_stream_info_s*)stream_info;
 
        LOGI(">> enter");
 
        SM_INSTANCE_CHECK(stream_h);
 
-       if (!(stream_h->acquired_focus & focus_mask) || !(stream_h->prev_acquired_focus & focus_mask)) {
-               LOGE("invalid state : focus_mask[0x%x], acquired_focus[0x%x], prev[0x%x]",
-                       focus_mask, stream_h->acquired_focus, stream_h->prev_acquired_focus);
+       if ((ret = mm_sound_focus_is_cb_thread(&is_focus_cb_thread)))
+               return _convert_sound_manager_error_code(__func__, ret);
+
+       if (is_focus_cb_thread && !(stream_h->prev_acquired_focus & focus_mask)) {
+               LOGE("invalid state: focus_mask[0x%x], prev_acquired_focus[0x%x]", focus_mask, stream_h->prev_acquired_focus);
+               return _convert_sound_manager_error_code(__func__, MM_ERROR_SOUND_INVALID_STATE);
+       }
+
+       if (!(stream_h->acquired_focus & focus_mask)) {
+               LOGE("invalid state: focus_mask[0x%x], acquired_focus[0x%x]", focus_mask, stream_h->acquired_focus);
                return _convert_sound_manager_error_code(__func__, MM_ERROR_SOUND_INVALID_STATE);
        }