focus-server: fix bug of invoking monitor callback of other nodes
[platform/core/multimedia/libmm-sound.git] / focus_server / mm_sound_mgr_focus.c
index d614b78..982144a 100644 (file)
@@ -191,7 +191,7 @@ static bool _check_session_node_exist(int pid)
        return false;
 }
 
-static bool _check_session_watch_node_exist(int pid)
+static bool _check_session_monitor_node_exist(int pid)
 {
        GList *list = NULL;
        focus_node_t *node = NULL;
@@ -200,15 +200,11 @@ static bool _check_session_watch_node_exist(int pid)
                node = (focus_node_t *)list->data;
                if (node->pid != pid)
                        continue;
-               if (!node->is_for_watch)
-                       continue;
-               if (node->is_for_monitor)
-                       continue;
-               if (node->is_for_session)
+               if (node->is_for_watch && node->is_for_session && node->is_for_monitor)
                        return true;
        }
 
-       debug_msg("session watch node for pid[%d] does not exist", pid);
+       debug_msg("session monitor node for pid[%d] does not exist", pid);
 
        return false;
 }
@@ -342,7 +338,7 @@ RELEASE:
        }
 }
 
-/* session backward compatibility for monitor handle */
+/* session backward compatibility for monitor handle, it is for monitor callback of other nodes */
 static int _mm_sound_mgr_focus_do_monitor_callback_outer(focus_type_e focus_type, focus_command_e command, focus_node_t *my_node, const _mm_sound_mgr_focus_param_t *param)
 {
        GList *list = NULL;
@@ -359,12 +355,15 @@ static int _mm_sound_mgr_focus_do_monitor_callback_outer(focus_type_e focus_type
                CONTINUE_IF_LIST_DATA_IS_NULL(node, list);
                if (node == my_node)
                        continue;
+               /* do not invoke monitor callback of mine */
+               if (node->pid == my_node->pid)
+                       continue;
                if (!node->is_for_watch || !node->is_for_monitor || !node->is_for_session)
                        continue;
                if (!(node->status & focus_type))
                        continue;
                /* check if it meets the condition to trigger monitor callback */
-               if (!_check_session_watch_node_exist(node->pid))
+               if (!_check_session_monitor_node_exist(node->pid))
                        continue;
 
                _invoke_watch_callback(node, my_node->stream_type, focus_type, command, param);