Bug fix: do not close dbus io stream when group/user service was stopped. 96/99096/1
authorYunmi Ha <yunmi.ha@samsung.com>
Tue, 22 Nov 2016 01:55:33 +0000 (10:55 +0900)
committerYunmi Ha <yunmi.ha@samsung.com>
Tue, 22 Nov 2016 01:55:33 +0000 (10:55 +0900)
Reason:
group/user services are run each other and share same parents connection.
However, when one service terminates, close a common IO stream.
So remained service has a problem with that IO stream.

Fix:
When main dbus service(usermanagement) is stopped, close IO stream.
(Move logic)

Change-Id: Iac30465b2c8a927934f9b3595a204833098168a1
Signed-off-by: Yunmi Ha <yunmi.ha@samsung.com>
src/daemon/dbus/gumd-dbus-group-service-adapter.c
src/daemon/dbus/gumd-dbus-server-msg-bus.c
src/daemon/dbus/gumd-dbus-user-service-adapter.c

index 319ae4a..da95288 100755 (executable)
@@ -262,9 +262,9 @@ _dispose (
          * Following code snippet at least closes the stream to avoid any
          * descriptors leak.
          * */
-        GIOStream *stream = g_dbus_connection_get_stream (
-                self->priv->connection);
-        if (stream) g_io_stream_close (stream, NULL, NULL);
+        //GIOStream *stream = g_dbus_connection_get_stream (
+        //        self->priv->connection);
+        //if (stream) g_io_stream_close (stream, NULL, NULL);
         g_object_unref (self->priv->connection);
         self->priv->connection = NULL;
     }
index 0ba0e8f..f67d0c8 100755 (executable)
@@ -69,6 +69,7 @@ struct _GumdDbusServerMsgBusPrivate
     GumdDbusUserServiceAdapter *user_service;
     GumdDbusGroupServiceAdapter *group_service;
     guint name_owner_id;
+    GDBusConnection *connection;
 };
 
 #define GUMD_DBUS_SERVER_MSG_BUS_GET_PRIV(obj) G_TYPE_INSTANCE_GET_PRIVATE ( \
@@ -145,6 +146,10 @@ _on_bus_acquired (
     GumdDbusServerMsgBus *server = GUMD_DBUS_SERVER_MSG_BUS (user_data);
 
     DBG("Export user service interface");
+
+    server->priv->connection = connection;
+    g_object_ref(server->priv->connection);
+
     server->priv->user_service =
                gumd_dbus_user_service_adapter_new_with_connection (
                                connection,
@@ -313,6 +318,16 @@ _gumd_dbus_server_msg_bus_stop (
         server->priv->user_service = NULL;
     }
 
+    if (server->priv->connection) {
+        GIOStream *stream = g_dbus_connection_get_stream (server->priv->connection);
+        if (stream) {
+            DBG("g_io_stream_close '%p'", stream);
+            g_io_stream_close (stream, NULL, NULL);
+        }
+        g_object_unref (server->priv->connection);
+        server->priv->connection = NULL;
+    }
+
     if (server->priv->name_owner_id) {
         g_bus_unown_name (server->priv->name_owner_id);
         server->priv->name_owner_id = 0;
index eb77333..7bfc5e9 100755 (executable)
@@ -268,9 +268,9 @@ _dispose (
          * Following code snippet at least closes the stream to avoid any
          * descriptors leak.
          * */
-        GIOStream *stream = g_dbus_connection_get_stream (
-                self->priv->connection);
-        if (stream) g_io_stream_close (stream, NULL, NULL);
+        //GIOStream *stream = g_dbus_connection_get_stream (
+        //        self->priv->connection);
+        //i (stream) g_io_stream_close (stream, NULL, NULL);
         g_object_unref (self->priv->connection);
         self->priv->connection = NULL;
     }