Remove g-variant_get duplicated and so on the dbus signal 29/124229/3
authorJiyong Min <jiyong.min@samsung.com>
Tue, 11 Apr 2017 01:38:15 +0000 (10:38 +0900)
committerhj kim <backto.kim@samsung.com>
Tue, 11 Apr 2017 02:04:27 +0000 (19:04 -0700)
 [Problem] During C# TCT, IPC signal make crash by abnormal memory access.

Change-Id: I4f183aed57c661d2988ffe0d8ac15c73bd4846fb
Signed-off-by: Jiyong Min <jiyong.min@samsung.com>
src/media_controller_ipc.c

index e34bb29ccdb354dd8842022a4d2faac41107b358..bc621ebf86e046925c8ced765d4cbb68b13ae403 100755 (executable)
@@ -48,20 +48,23 @@ static void __mc_ipc_signal_cb(GDBusConnection *connection,
 {
        char *key = __make_key_for_map(interface_name, signal_name);
        GList *listener_list = (GList *)user_data;
+       mc_ipc_listener_s *listener = NULL;
        unsigned int i = 0;
 
-       mc_debug("__mc_ipc_signal_cb Received : ");
+       mc_debug("__mc_ipc_signal_cb Received :");
 
-       for (i = 0; i < g_list_length(listener_list); i++) {
-               mc_ipc_listener_s *listener = (mc_ipc_listener_s *)g_list_nth_data(listener_list, i);
+       gchar *message = NULL;
+       int internal_flags = 0;
+       g_variant_get(parameters, "(i&s)", &internal_flags, &message);
+       if (!message) {
+               mc_error("g_variant_get() fail");
+               return;
+       }
+
+       unsigned int listener_cnt = g_list_length(listener_list);
+       for (i = 0; i < listener_cnt; i++) {
+               listener = (mc_ipc_listener_s *)g_list_nth_data(listener_list, i);
                if (listener && !strcmp(listener->key, key)) {
-                       gchar *message = NULL;
-                       int internal_flags = 0;
-                       g_variant_get(parameters, "(i&s)", &internal_flags, &message);
-                       if (!message) {
-                               mc_error("g_variant_get() fail");
-                               break;
-                       }
                        mc_debug("Received : [%s] (flags = %x) from %s.%s", message, internal_flags, listener->interface_name, listener->signal_name);
                        listener->callback(listener->interface_name, listener->signal_name, message, 0, listener->user_data);
                }