From: Sung-jae Park Date: Mon, 17 Feb 2014 01:24:08 +0000 (+0900) Subject: Replace exec name if the slave gets crash X-Git-Tag: submit/tizen_mobile/20150512.125148^2~1^2~15^2~9^2~77 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8bdbf8b01901b6fe603d5aae97ceaaa1525225fb;p=platform%2Fcore%2Fappfw%2Fdata-provider-slave.git Replace exec name if the slave gets crash Change-Id: Ibb647c65c1fbb47e84ab3750d79fc638d45244d4 --- diff --git a/include/fault.h b/include/fault.h index 6c4d54f..e0398c2 100644 --- a/include/fault.h +++ b/include/fault.h @@ -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); diff --git a/src/fault.c b/src/fault.c index eb32235..b6c8161 100644 --- a/src/fault.c +++ b/src/fault.c @@ -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)); } diff --git a/src/main.c b/src/main.c index 05f2ca3..419bf5e 100644 --- a/src/main.c +++ b/src/main.c @@ -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) {