modules: check init function return values.
authorLukasz Stanislawski <l.stanislaws@samsung.com>
Fri, 19 Feb 2016 16:35:29 +0000 (17:35 +0100)
committerMichal Pawluk <m.pawluk@samsung.com>
Wed, 9 Mar 2016 12:26:31 +0000 (04:26 -0800)
Previously return values of modules initi functions were not checked.

Change-Id: Ia444cfe8fe835c2efbfb7faf26866e54ef6018e0
Signed-off-by: Lukasz Stanislawski <l.stanislaws@samsung.com>
inc/indicator.h
src/modules/modules.c

index 642bc5a1838fd71086ab4b18a1de6b73b964d3ed..e4029fa2d15dc0ae96c5fbbef4ec803fad8c9f72 100644 (file)
@@ -214,6 +214,7 @@ typedef struct Indicator_Icon {
        int tts_enable;
 #endif
        int digit_area;
+       Eina_Bool initialized; /* TRUE is module was correctly intiialized */
 } icon_s;
 
 //int rssi_get_sim_number(TapiHandle *handle_obj);
index f3f41e86c2bff4dbcc830bd50387c02afce7f87f..8cdc93c84f2754909181617933d856f2df6f1f9d 100644 (file)
@@ -132,9 +132,9 @@ void modules_init(void *data)
        for (i = 0; modules[i]; i++) {
                list_insert_icon(modules[i]);
                modules[i]->ad = data;
-               if (modules[i]->init)
-               {
-                       modules[i]->init(data);
+               if (modules[i]->init && !modules[i]->initialized) {
+                       if (modules[i]->init(data) == OK)
+                               modules[i]->initialized = EINA_TRUE;
                }
        }
 }
@@ -148,9 +148,9 @@ void modules_init_first(void *data)
        for (i = 0; i < 5; i++) {
                list_insert_icon(modules[i]);
                modules[i]->ad = data;
-               if (modules[i]->init)
-               {
-                       modules[i]->init(data);
+               if (modules[i]->init && !modules[i]->initialized) {
+                       if (modules[i]->init(data) == OK)
+                               modules[i]->initialized = EINA_TRUE;
                }
        }
 }
@@ -162,8 +162,10 @@ void modules_fini(void *data)
        int i;
        /* add items to list */
        for (i = 0; modules[i]; i++) {
-               if (modules[i]->fini)
-                       modules[i]->fini();
+               if (modules[i]->fini && modules[i]->initialized) {
+                       if (modules[i]->fini() == OK)
+                               modules[i]->initialized = EINA_FALSE;
+               }
        }
 
        /* delete modules */
@@ -177,7 +179,7 @@ void modules_lang_changed(void *data)
        int i;
        /* add items to list */
        for (i = 0; modules[i]; i++) {
-               if (modules[i]->lang_changed)
+               if (modules[i]->lang_changed && modules[i]->initialized)
                        modules[i]->lang_changed(data);
        }
 }
@@ -189,7 +191,7 @@ void modules_region_changed(void *data)
        int i;
        /* add items to list */
        for (i = 0; modules[i]; i++) {
-               if (modules[i]->region_changed)
+               if (modules[i]->region_changed && modules[i]->initialized)
                        modules[i]->region_changed(data);
        }
 }
@@ -201,7 +203,7 @@ void modules_minictrl_control(int action, const char* name, void *data)
        int i;
        /* add items to list */
        for (i = 0; modules[i]; i++) {
-               if (modules[i]->minictrl_control)
+               if (modules[i]->minictrl_control && modules[i]->initialized)
                        modules[i]->minictrl_control(action, name, data);
        }
 }
@@ -213,7 +215,7 @@ void modules_wake_up(void *data)
        int i;
        /* add items to list */
        for (i = 0; modules[i]; i++) {
-               if (modules[i]->wake_up)
+               if (modules[i]->wake_up && modules[i]->initialized)
                        modules[i]->wake_up(data);
        }
 }
@@ -227,7 +229,7 @@ void modules_register_tts(void *data)
        /* add items to list */
        for (i = 0; modules[i]; i++) {
                modules[i]->ad = data;
-               if (modules[i]->register_tts)
+               if (modules[i]->register_tts && modules[i]->initialized)
                {
                        modules[i]->register_tts(data);
                }