Don't leak message
[platform/core/uifw/at-spi2-atk.git] / atk-adaptor / bridge.c
index be1810c..a66f0e2 100644 (file)
@@ -249,7 +249,9 @@ register_reply (DBusPendingCall *pending, void *user_data)
           dbus_message_iter_next (&iter_struct);
           dbus_message_iter_get_basic (&iter_struct, &obj_path);
 
+          g_free (app->desktop_name);
           app->desktop_name = g_strdup (app_name);
+          g_free (app->desktop_path);
           app->desktop_path = g_strdup (obj_path);
         }
     }
@@ -275,8 +277,8 @@ register_application (SpiBridge * app)
 
   /* These will be overridden when we get a reply, but in practice these
      defaults should always be correct */
-  app->desktop_name = ATSPI_DBUS_NAME_REGISTRY;
-  app->desktop_path = ATSPI_DBUS_PATH_ROOT;
+  app->desktop_name = g_strdup (ATSPI_DBUS_NAME_REGISTRY);
+  app->desktop_path = g_strdup (ATSPI_DBUS_PATH_ROOT);
 
   message = dbus_message_new_method_call (SPI_DBUS_NAME_REGISTRY,
                                           ATSPI_DBUS_PATH_ROOT,
@@ -289,6 +291,7 @@ register_application (SpiBridge * app)
     if (!dbus_connection_send_with_reply (app->bus, message, &pending, -1)
         || !pending)
     {
+        dbus_message_unref (message);
         return FALSE;
     }
 
@@ -339,6 +342,11 @@ deregister_application (SpiBridge * app)
     g_free (app->app_tmp_dir);
     app->app_tmp_dir = NULL;
   }
+
+  g_free (app->desktop_name);
+  app->desktop_name = NULL;
+  g_free (app->desktop_path);
+  app->desktop_path = NULL;
 }
 
 /*---------------------------------------------------------------------------*/
@@ -939,7 +947,9 @@ atk_bridge_adaptor_cleanup (void)
     {
       dbus_connection_remove_filter (spi_global_app_data->bus, signal_filter, NULL);
       droute_context_unregister (spi_global_app_data->droute, spi_global_app_data->bus);
+      dbus_connection_close (spi_global_app_data->bus);
       dbus_connection_unref (spi_global_app_data->bus);
+      spi_global_app_data->bus = NULL;
     }
 
   for (l = spi_global_app_data->direct_connections; l; l = l->next)
@@ -953,15 +963,16 @@ atk_bridge_adaptor_cleanup (void)
       dbus_connection_unref (connection);
     }
   g_list_free (spi_global_app_data->direct_connections);
+  spi_global_app_data->direct_connections = NULL;
 
   for (ls = clients; ls; ls = ls->next)
     g_free (l->data);
   g_slist_free (clients);
   clients = NULL;
 
-  g_object_unref (spi_global_cache);
-  g_object_unref (spi_global_leasing);
-  g_object_unref (spi_global_register);
+  g_clear_object (&spi_global_cache);
+  g_clear_object (&spi_global_leasing);
+  g_clear_object (&spi_global_register);
 
   if (spi_global_app_data->main_context)
     g_main_context_unref (spi_global_app_data->main_context);