Replace exec name if the slave gets crash
authorSung-jae Park <nicesj.park@samsung.com>
Mon, 17 Feb 2014 01:24:08 +0000 (10:24 +0900)
committerSung-jae Park <nicesj.park@samsung.com>
Mon, 17 Feb 2014 01:25:05 +0000 (10:25 +0900)
Change-Id: Ibb647c65c1fbb47e84ab3750d79fc638d45244d4

include/fault.h
src/fault.c
src/main.c

index 6c4d54f..e0398c2 100644 (file)
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-extern int fault_init(void);
+extern int fault_init(char **argv);
 extern int fault_fini(void);
 extern int fault_mark_call(const char *pkgname, const char *filename, const char *funcname, int noalarm, int life_time);
 extern int fault_unmark_call(const char *pkgname, const char *filename, const char *funcname, int noalarm);
index eb32235..b6c8161 100644 (file)
@@ -55,9 +55,11 @@ static struct info {
        struct sigaction ALRM_act;
        struct sigaction USR1_act;
        struct sigaction ABRT_act;
+       char **argv;
 } s_info = {
        .marked = 0,
        .disable_checker = 0,
+       .argv = NULL,
 };
 
 static void signal_handler(int signum, siginfo_t *info, void *unused)
@@ -127,6 +129,10 @@ static void signal_handler(int signum, siginfo_t *info, void *unused)
        CRITICAL_LOG("SIGNAL> Error code: %d\n", info->si_code);
        CRITICAL_LOG("SIGNAL> Address: %p\n", info->si_addr);
        CRITICAL_LOG("Package: [%s] Symbol[%s]\n", so_fname, symbol);
+
+       int len = strlen(s_info.argv[0]);
+       memset(s_info.argv[0], 0, len);
+       strncpy(s_info.argv[0], util_basename(so_fname), len - 1);
        free(so_fname);
        free(symbol);
 
@@ -155,11 +161,13 @@ static void signal_handler(int signum, siginfo_t *info, void *unused)
        return;
 }
 
-HAPI int fault_init(void)
+HAPI int fault_init(char **argv)
 {
        struct sigaction act;
        char *ecore_abort;
 
+       s_info.argv = argv;
+
        act.sa_sigaction = signal_handler;
        act.sa_flags = SA_SIGINFO;
 
@@ -170,6 +178,7 @@ HAPI int fault_init(void)
        if (sigaddset(&act.sa_mask, SIGUSR1) != 0) {
                ErrPrint("Failed to add set: %s\n", strerror(errno));
        }
+
        if (sigaddset(&act.sa_mask, SIGALRM) != 0) {
                ErrPrint("Failed to add set: %s\n", strerror(errno));
        }
index 05f2ca3..419bf5e 100644 (file)
@@ -401,7 +401,7 @@ static void initialize_glib_type_system(void)
        }
 }
 
-static bool app_create(void *data)
+static bool app_create(void *argv)
 {
        int ret;
 
@@ -434,7 +434,7 @@ static bool app_create(void *data)
         *
         * So create callback doesn't do anything.
         */
-       ret = fault_init();
+       ret = fault_init(argv);
        DbgPrint("Crash recover is initiated: %d\n", ret);
 
        ret = update_monitor_init();
@@ -633,7 +633,7 @@ int main(int argc, char *argv[])
        event_callback.device_orientation = NULL;
        event_callback.language_changed = app_language_changed;
        event_callback.region_format_changed = app_region_changed;
-       ret = app_efl_main(&argc, &argv, &event_callback, NULL);
+       ret = app_efl_main(&argc, &argv, &event_callback, argv);
        critical_log_fini();
        ErrPrint("Failed to init: %d\n", ret);
        if (s_info.heap_monitor) {