[FIX] correct to call mod_us_app_inst() at the second start 51/42951/3
authorVyacheslav Cherkashin <v.cherkashin@samsung.com>
Fri, 3 Jul 2015 17:23:09 +0000 (20:23 +0300)
committerDmitry Kovalenko <d.kovalenko@samsung.com>
Mon, 6 Jul 2015 08:41:06 +0000 (01:41 -0700)
Change-Id: I876fb4136345286b241a0d0a749271f9c80b77dd
Signed-off-by: Vyacheslav Cherkashin <v.cherkashin@samsung.com>
parser/us_inst.c
us_manager/pf/pf_group.c
us_manager/pf/pf_group.h

index d298ae8..b6f44b8 100644 (file)
@@ -50,21 +50,36 @@ static LIST_HEAD(pfg_item_list);
 static DEFINE_SPINLOCK(pfg_item_lock);
 
 
+static struct pfg_msg_cb msg_cb = {
+       .msg_info = usm_msg_info,
+       .msg_status_info = usm_msg_status_info,
+       .msg_term = usm_msg_term,
+       .msg_map = usm_msg_map,
+       .msg_unmap = usm_msg_unmap
+};
+
 static struct pfg_item *pfg_item_create(struct pf_group *pfg)
 {
+       int ret;
        struct pfg_item *item;
 
+       ret = pfg_msg_cb_set(pfg, &msg_cb);
+       if (ret)
+               return ERR_PTR(ret);
+
        item = kmalloc(sizeof(*item), GFP_KERNEL);
-       if (item) {
-               INIT_LIST_HEAD(&item->list);
-               item->pfg = pfg;
-       }
+       if (item == NULL)
+               return ERR_PTR(-ENOMEM);
+
+       INIT_LIST_HEAD(&item->list);
+       item->pfg = pfg;
 
        return item;
 }
 
 static void pfg_item_free(struct pfg_item *item)
 {
+       pfg_msg_cb_reset(item->pfg);
        kfree(item);
 }
 
@@ -95,8 +110,8 @@ static int pfg_add(struct pf_group *pfg)
                struct pfg_item *item;
 
                item = pfg_item_create(pfg);
-               if (item == NULL)
-                       return -ENOMEM;
+               if (IS_ERR(item))
+                       return PTR_ERR(item);
 
                spin_lock(&pfg_item_lock);
                list_add(&item->list, &pfg_item_list);
@@ -202,14 +217,6 @@ static int get_pfg_by_app_info(struct app_info_data *app_info,
        return 0;
 }
 
-static struct pfg_msg_cb msg_cb = {
-       .msg_info = usm_msg_info,
-       .msg_status_info = usm_msg_status_info,
-       .msg_term = usm_msg_term,
-       .msg_map = usm_msg_map,
-       .msg_unmap = usm_msg_unmap
-};
-
 static int mod_us_app_inst(struct app_inst_data *app_inst, enum MOD_TYPE mt)
 {
        int ret, i;
@@ -229,14 +236,6 @@ static int mod_us_app_inst(struct app_inst_data *app_inst, enum MOD_TYPE mt)
                return ret;
        }
 
-       ret = pfg_msg_cb_set(pfg, &msg_cb);
-       if (ret) {
-               put_pf_group(pfg);
-               printk(KERN_INFO "Cannot set path [%s], ret=%d\n",
-                      app_inst->app_info->exec_path, ret);
-               return ret;
-       }
-
        for (i = 0; i < app_inst->cnt_func; ++i) {
                /* TODO: */
                dentry = dentry_by_path(app_inst->app_info->exec_path);
index 6b2ec7b..345c69e 100644 (file)
@@ -230,6 +230,12 @@ int pfg_msg_cb_set(struct pf_group *pfg, struct pfg_msg_cb *msg_cb)
 }
 EXPORT_SYMBOL_GPL(pfg_msg_cb_set);
 
+void pfg_msg_cb_reset(struct pf_group *pfg)
+{
+       pfg->msg_cb = NULL;
+}
+EXPORT_SYMBOL_GPL(pfg_msg_cb_reset);
+
 struct pfg_msg_cb *pfg_msg_cb_get(struct pf_group *pfg)
 {
        return pfg->msg_cb;
index 908891b..00f71c1 100644 (file)
@@ -52,6 +52,7 @@ struct pf_group *get_pf_group_dumb(void *priv);
 void put_pf_group(struct pf_group *pfg);
 
 int pfg_msg_cb_set(struct pf_group *pfg, struct pfg_msg_cb *msg_cb);
+void pfg_msg_cb_reset(struct pf_group *pfg);
 struct pfg_msg_cb *pfg_msg_cb_get(struct pf_group *pfg);
 
 int pf_register_probe(struct pf_group *pfg, struct dentry *dentry,