Remove duplicated instance info with package info.
authorSung-jae Park <nicesj.park@samsung.com>
Thu, 29 Aug 2013 15:13:32 +0000 (00:13 +0900)
committerSung-jae Park <nicesj.park@samsung.com>
Thu, 29 Aug 2013 15:13:32 +0000 (00:13 +0900)
Change-Id: If6156427af9423a388a096f08eb5de2dc84d0aa4

include/instance.h
packaging/data-provider-master.spec
src/instance.c
src/package.c

index 32856d6..6bbf554 100644 (file)
@@ -136,6 +136,7 @@ struct client_node;
 
 extern struct inst_info *instance_create(struct client_node *client, double timestamp, const char *pkgname, const char *content, const char *cluster, const char *category, double period, int width, int height);
 extern int instance_destroy(struct inst_info *inst, enum instance_destroy_type type);
+extern int instance_reload(struct inst_info *inst, enum instance_destroy_type type);
 
 extern struct inst_info * instance_ref(struct inst_info *inst);
 extern struct inst_info * instance_unref(struct inst_info *inst);
index c75a46e..3310393 100755 (executable)
@@ -1,6 +1,6 @@
 Name: data-provider-master
 Summary: Master service provider for liveboxes.
-Version: 0.25.9
+Version: 0.25.10
 Release: 1
 Group: HomeTF/Livebox
 License: Flora License
index 02107be..73631e5 100644 (file)
@@ -120,8 +120,6 @@ struct inst_info {
                        struct buffer_info *buffer;
                } canvas;
 
-               const char *auto_launch;
-               int timeout;
                double period;
        } lb;
 
@@ -396,7 +394,7 @@ HAPI int instance_unicast_created_event(struct inst_info *inst, struct client_no
                        inst->pd.width, inst->pd.height,
                        inst->cluster, inst->category,
                        lb_file, pd_file,
-                       inst->lb.auto_launch,
+                       package_auto_launch(inst->info),
                        inst->lb.priority,
                        package_size_list(inst->info),
                        !!inst->client,
@@ -461,7 +459,7 @@ static int instance_broadcast_created_event(struct inst_info *inst)
                        inst->pd.width, inst->pd.height,
                        inst->cluster, inst->category,
                        lb_file, pd_file,
-                       inst->lb.auto_launch,
+                       package_auto_launch(inst->info),
                        inst->lb.priority,
                        package_size_list(inst->info),
                        !!inst->client,
@@ -661,14 +659,6 @@ static inline void destroy_instance(struct inst_info *inst)
                DbgFree(tag_item);
        }
 
-       /*!
-        * \note
-        *
-        * inst->lb.auto_launch
-        *
-        * will be released by the package object
-        * it is readonly value for instances
-        */
        EINA_LIST_FREE(inst->delete_event_list, item) {
                DbgFree(item);
        }
@@ -711,11 +701,9 @@ static inline int fork_package(struct inst_info *inst, const char *pkgname)
        }
 
        snprintf(inst->id, len, SCHEMA_FILE "%s%s_%d_%lf.png", IMAGE_PATH, package_name(info), client_pid(inst->client), inst->timestamp);
-       inst->lb.auto_launch = package_auto_launch(info);
 
        instance_set_pd_size(inst, package_pd_width(info), package_pd_height(info));
 
-       inst->lb.timeout = package_timeout(info);
        inst->lb.period = package_period(info);
 
        inst->info = info;
@@ -1316,6 +1304,49 @@ HAPI int instance_destroy(struct inst_info *inst, enum instance_destroy_type typ
        return slave_rpc_async_request(package_slave(inst->info), package_name(inst->info), packet, deactivate_cb, instance_ref(inst), 0);
 }
 
+HAPI int instance_reload(struct inst_info *inst, enum instance_destroy_type type)
+{
+       struct packet *packet;
+       int ret;
+
+       DbgPrint("Reload instance (%s)\n", instance_id(inst));
+
+       if (!inst) {
+               ErrPrint("Invalid instance handle\n");
+               return LB_STATUS_ERROR_INVALID;
+       }
+
+       switch (inst->state) {
+       case INST_REQUEST_TO_ACTIVATE:
+       case INST_REQUEST_TO_REACTIVATE:
+               return LB_STATUS_SUCCESS;
+       case INST_INIT:
+               ret = instance_activate(inst);
+               if (ret < 0) {
+                       ErrPrint("Failed to activate instance: %d (%s)\n", ret, instance_id(inst));
+               }
+               return LB_STATUS_SUCCESS;
+       case INST_DESTROYED:
+       case INST_REQUEST_TO_DESTROY:
+               DbgPrint("Instance is destroying now\n");
+               return LB_STATUS_SUCCESS;
+       default:
+               break;
+       }
+
+       packet = packet_create("delete", "ssi", package_name(inst->info), inst->id, type);
+       if (!packet) {
+               ErrPrint("Failed to build a packet for %s\n", package_name(inst->info));
+               return LB_STATUS_ERROR_FAULT;
+       }
+
+       inst->destroy_type = type;
+       inst->requested_state = INST_ACTIVATED;
+       inst->state = INST_REQUEST_TO_DESTROY;
+       inst->changing_state = 1;
+       return slave_rpc_async_request(package_slave(inst->info), package_name(inst->info), packet, deactivate_cb, instance_ref(inst), 0);
+}
+
 /* Client Deactivated Callback */
 static int pd_buffer_close_cb(struct client_node *client, void *inst)
 {
@@ -1454,7 +1485,7 @@ HAPI int instance_reactivate(struct inst_info *inst)
                        package_name(inst->info),
                        inst->id,
                        inst->content,
-                       inst->lb.timeout,
+                       package_timeout(inst->info),
                        !!package_lb_path(inst->info),
                        inst->lb.period,
                        inst->cluster,
@@ -1520,7 +1551,7 @@ HAPI int instance_activate(struct inst_info *inst)
                        package_name(inst->info),
                        inst->id,
                        inst->content,
-                       inst->lb.timeout,
+                       package_timeout(inst->info),
                        !!package_lb_path(inst->info),
                        inst->lb.period,
                        inst->cluster,
@@ -2538,7 +2569,7 @@ HAPI int instance_change_group(struct inst_info *inst, const char *cluster, cons
 
 HAPI const char * const instance_auto_launch(const struct inst_info *inst)
 {
-       return inst->lb.auto_launch;
+       return package_auto_launch(inst->info);
 }
 
 HAPI const int const instance_priority(const struct inst_info *inst)
@@ -2553,7 +2584,7 @@ HAPI const struct client_node *const instance_client(const struct inst_info *ins
 
 HAPI const int const instance_timeout(const struct inst_info *inst)
 {
-       return inst->lb.timeout;
+       return package_timeout(inst->info);
 }
 
 HAPI const double const instance_period(const struct inst_info *inst)
index fccd666..2c93ce8 100644 (file)
@@ -1280,13 +1280,6 @@ static inline void reload_package_info(struct pkg_info *info)
        struct inst_info *inst;
 
        DbgPrint("Already exists, try to update it\n");
-       /*!
-        * \note
-        * Without "is_uninstalled", the package will be kept
-        */
-       EINA_LIST_FOREACH_SAFE(info->inst_list, l, n, inst) {
-               instance_destroy(inst, INSTANCE_DESTROY_PKGMGR);
-       }
 
        group_del_livebox(info->pkgname);
        package_clear_fault(info);
@@ -1296,6 +1289,14 @@ static inline void reload_package_info(struct pkg_info *info)
         * Nested DB I/O
         */
        io_load_package_db(info);
+
+       /*!
+        * \note
+        * Without "is_uninstalled", the package will be kept
+        */
+       EINA_LIST_FOREACH_SAFE(info->inst_list, l, n, inst) {
+               instance_reload(inst, INSTANCE_DESTROY_PKGMGR);
+       }
 }
 
 static int io_install_cb(const char *pkgname, int prime, void *data)