Reset the Proxy if it fails to keep connection.
authorSung-jae Park <nicesj.park@samsung.com>
Tue, 12 Jun 2012 01:34:36 +0000 (10:34 +0900)
committerSung-jae Park <nicesj.park@samsung.com>
Tue, 12 Jun 2012 01:34:36 +0000 (10:34 +0900)
Change-Id: Iff4f45bf3e099925d3d1fdec8502fb6b8c713bc9

debian/changelog
deprecated/slave_manager.h [moved from include/slave_manager.h with 100% similarity]
include/client_rpc.h
include/slave_rpc.h
packaging/com.samsung.data-provider-master.spec
src/client_life.c
src/client_rpc.c
src/dbus.c
src/slave_life.c
src/slave_rpc.c

index 50a1ac8..8727274 100644 (file)
@@ -1,3 +1,10 @@
+data-provider-master (0.3.1) unstable; urgency=low
+
+  * Git: slp/pkgs/d/data-provider-master
+  * Tag: data-provider-master_0.3.1
+
+ -- Sung-jae Park <nicesj.park@samsung.com>  Tue, 12 Jun 2012 10:34:24 +0900
+
 data-provider-master (0.3.0) unstable; urgency=low
 
   * Git: slp/pkgs/d/data-provider-master
index 27bea5a..348280f 100644 (file)
@@ -7,12 +7,11 @@ extern int client_rpc_broadcast(const char *funcname, GVariant *param);
 /*!
  */
 extern int client_rpc_update_proxy(struct client_node *client, GDBusProxy *proxy);
-extern int client_rpc_update_conn(struct client_node *client, GDBusConnection *conn);
+extern int client_rpc_reset_proxy(struct client_node *client);
 
 /*!
  */
 extern struct client_node *client_rpc_find_by_proxy(GDBusProxy *proxy);
-extern struct client_node *client_rpc_find_by_conn(GDBusConnection *conn);
 
 /*!
  */
index f6296a0..0366d4e 100644 (file)
@@ -11,6 +11,7 @@ extern int slave_rpc_pause_all(void);
 extern int slave_rpc_resume_all(void);
 extern int slave_rpc_ping(struct slave_node *slave);
 extern int slave_rpc_update_proxy(struct slave_node *slave, GDBusProxy *proxy);
+extern int slave_rpc_reset_proxy(struct slave_node *slave);
 extern void slave_rpc_clear_request_by_slave(struct slave_node *slave);
 extern void slave_rpc_request_update(const char *pkgname, const char *cluster, const char *category);
 
index 5dd6676..f27ff03 100644 (file)
@@ -1,6 +1,6 @@
 Name: com.samsung.data-provider-master
 Summary: Master data provider
-Version: 0.3.0
+Version: 0.3.1
 Release: 1
 Group: main/app
 License: Samsung Proprietary License
index 1eeb236..4ecdcf5 100644 (file)
@@ -256,6 +256,8 @@ int client_deactivated_by_fault(struct client_node *client)
        client->faulted = 1;
 
        client->pid = (pid_t)-1;
+       client_rpc_reset_proxy(client);
+
        invoke_deactivated_cb(client);
        client_destroy(client);
        return 0;
@@ -270,6 +272,8 @@ int client_fault(struct client_node *client)
        client->faulted = 1;
 
        client->pid = (pid_t)-1;
+       client_rpc_reset_proxy(client);
+
        invoke_deactivated_cb(client);
        client_destroy(client);
        /*!
index afd13c6..f85f35f 100644 (file)
@@ -29,7 +29,6 @@ static struct info {
 
 struct client_rpc {
        GDBusProxy *proxy; /*!< Proxy object for this client */
-       GDBusConnection *conn; /*!< Connection object for this client */
        Eina_List *pending_request_list; /*!< Before making connection, this Q will be used for keeping the request packets */
        struct client_node *client; /*!< client_life object */
 };
@@ -267,10 +266,9 @@ int client_rpc_sync_request(struct client_node *client, const char *funcname, GV
        return ret;
 }
 
-int client_rpc_update_proxy(struct client_node *client, GDBusProxy *proxy)
+int client_rpc_reset_proxy(struct client_node *client)
 {
        struct client_rpc *rpc;
-       struct packet *packet;
 
        rpc = client_data(client, "rpc");
        if (!rpc) {
@@ -278,32 +276,30 @@ int client_rpc_update_proxy(struct client_node *client, GDBusProxy *proxy)
                return -EINVAL;
        }
 
-       if (rpc->proxy)
-               DbgPrint("Proxy is overwritten\n");
-
-       rpc->proxy = proxy;
-
-       EINA_LIST_FREE(rpc->pending_request_list, packet) {
-               push_packet(packet);
-       }
-
+       rpc->proxy = NULL;
        return 0;
 }
 
-int client_rpc_update_conn(struct client_node *client, GDBusConnection *conn)
+int client_rpc_update_proxy(struct client_node *client, GDBusProxy *proxy)
 {
        struct client_rpc *rpc;
+       struct packet *packet;
 
        rpc = client_data(client, "rpc");
        if (!rpc) {
-               ErrPrint("client has no \"rpc\" info\n");
+               ErrPrint("Client has no rpc info\n");
                return -EINVAL;
        }
 
-       if (rpc->conn)
-               ErrPrint("Connection is already exists, overwrite it\n");
+       if (rpc->proxy)
+               DbgPrint("Proxy is overwritten\n");
+
+       rpc->proxy = proxy;
+
+       EINA_LIST_FREE(rpc->pending_request_list, packet) {
+               push_packet(packet);
+       }
 
-       rpc->conn = conn;
        return 0;
 }
 
@@ -328,7 +324,6 @@ static int deactivated_cb(struct client_node *client, void *data)
        g_object_unref(rpc->proxy);
 
        rpc->proxy = NULL;
-       rpc->conn = NULL;
 
        EINA_LIST_FOREACH_SAFE(s_info.packet_list, l, n, packet) {
                if (packet->client != client)
@@ -380,6 +375,7 @@ int client_rpc_initialize(struct client_node *client)
 
        ret = client_set_data(client, "rpc", rpc);
        if (ret < 0) {
+               ErrPrint("Failed to set \"rpc\" for client\n");
                free(rpc);
                return ret;
        }
@@ -407,19 +403,4 @@ struct client_node *client_rpc_find_by_proxy(GDBusProxy *proxy)
        return NULL;
 }
 
-struct client_node *client_rpc_find_by_conn(GDBusConnection *conn)
-{
-       Eina_List *l;
-       struct client_rpc *rpc;
-
-       EINA_LIST_FOREACH(s_info.rpc_list, l, rpc) {
-               if (rpc->conn != conn)
-                       continue;
-
-               return rpc->client;
-       }
-
-       return NULL;
-}
-
 /* End of a file */
index 036f511..db3324d 100644 (file)
@@ -677,8 +677,6 @@ out:
                        return;
                }
 
-               client_rpc_update_conn(client, conn);
-
                sender = g_dbus_method_invocation_get_sender(inv);
                g_dbus_proxy_new(conn,
                        G_DBUS_PROXY_FLAGS_NONE,
index 330e15c..f841714 100644 (file)
@@ -334,6 +334,8 @@ int slave_deactivate(struct slave_node *slave)
        if (aul_terminate_pid(pid) < 0)
                ErrPrint("Terminate failed. pid %d\n", pid);
 
+       slave_rpc_reset_proxy(slave);
+
        invoke_deactivate_cb(slave);
 
        slave->state = SLAVE_PAUSED;
@@ -358,6 +360,8 @@ void slave_faulted(struct slave_node *slave)
        if (aul_terminate_pid(pid) < 0)
                ErrPrint("Terminate failed, pid %d\n", pid);
 
+       slave_rpc_reset_proxy(slave);
+
        invoke_deactivate_cb(slave);
        slave->state = SLAVE_PAUSED;
        slave_unref(slave);
@@ -379,6 +383,7 @@ void slave_deactivated_by_fault(struct slave_node *slave)
 
        slave->pid = (pid_t)-1;
        slave->fault_count++;
+       slave_rpc_reset_proxy(slave);
 
        invoke_deactivate_cb(slave);
        slave->state = SLAVE_PAUSED;
index 9148c4e..a2b4b9e 100644 (file)
@@ -504,6 +504,20 @@ int slave_rpc_ping(struct slave_node *slave)
        return 0;
 }
 
+int slave_rpc_reset_proxy(struct slave_node *slave)
+{
+       struct slave_rpc *rpc;
+
+       rpc = slave_data(slave, "rpc");
+       if (!rpc) {
+               ErrPrint("Failed to get RPC info\n");
+               return -EINVAL;
+       }
+
+       rpc->proxy = NULL;
+       return 0;
+}
+
 int slave_rpc_update_proxy(struct slave_node *slave, GDBusProxy *proxy)
 {
        struct slave_rpc *rpc;