Destroy pended command only if it is CREATED packet
authorSung-jae Park <nicesj.park@samsung.com>
Mon, 11 May 2015 13:00:20 +0000 (22:00 +0900)
committerSung-jae Park <nicesj.park@samsung.com>
Mon, 11 May 2015 13:06:31 +0000 (22:06 +0900)
Change-Id: Ib1aea74a542f71088eba6f6ac24281f63ec8818c

include/slave_rpc.h
src/slave_rpc.c

index 6784b94..e166374 100644 (file)
@@ -17,7 +17,7 @@
 extern int slave_rpc_async_request(struct slave_node *slave, const char *pkgname, struct packet *packet, void (*ret_cb)(struct slave_node *slave, const struct packet *packet, void *data), void *data, int urgent);
 extern int slave_rpc_request_only(struct slave_node *slave, const char *pkgname, struct packet *packet, int urgent);
 
-extern int slave_rpc_update_handle(struct slave_node *slave, int handle, int delete_pending_packet);
+extern int slave_rpc_update_handle(struct slave_node *slave, int handle, int delete_pended_created_packet);
 extern int slave_rpc_ping(struct slave_node *slave);
 extern void slave_rpc_request_update(const char *pkgname, const char *id, const char *cluster, const char *category, const char *content, int force);
 extern int slave_rpc_handle(struct slave_node *slave);
index 3c0bd29..ac8a389 100644 (file)
@@ -504,7 +504,7 @@ HAPI int slave_rpc_request_only(struct slave_node *slave, const char *pkgname, s
        return WIDGET_ERROR_NONE;
 }
 
-HAPI int slave_rpc_update_handle(struct slave_node *slave, int handle, int delete_pending_packet)
+HAPI int slave_rpc_update_handle(struct slave_node *slave, int handle, int delete_pended_create_packet)
 {
        struct slave_rpc *rpc;
        struct command *command;
@@ -534,8 +534,24 @@ HAPI int slave_rpc_update_handle(struct slave_node *slave, int handle, int delet
        slave_activated(slave);
 
        EINA_LIST_FREE(rpc->pending_list, command) {
-               if (delete_pending_packet) {
-                       destroy_command(command);
+               if (delete_pended_create_packet) {
+                       const char *cmd;
+
+                       cmd = packet_command(command->packet);
+                       if (cmd[0] == PACKET_CMD_INT_TAG) {
+                               int cmd_idx;
+
+                               cmd_idx = *((int *)cmd);
+                               if (cmd_idx == CMD_CREATED) {
+                                       destroy_command(command);
+                               } else {
+                                       push_command(command);
+                               }
+                       } else if (!strcmp(cmd, CMD_STR_CREATED)) {
+                               destroy_command(command);
+                       } else {
+                               push_command(command);
+                       }
                } else {
                        push_command(command);
                }