From: Seungbae Shin Date: Fri, 18 Aug 2017 07:55:47 +0000 (+0900) Subject: Do not raise() inside signal handler X-Git-Tag: accepted/tizen/4.0/unified/20170829.015758^0 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fmultimedia%2Flibmm-session.git;a=commitdiff_plain;h=a224a74dc66719bf1600fd89d6ede7afbad6c712 Do not raise() inside signal handler [Version] 0.2.12 [Profile] Common [Issue Type] Cleanup Change-Id: Ic2094a74bc6ce02870076469088bf7fda39f1dc4 --- diff --git a/mm_session.c b/mm_session.c index c537787..a10fc5a 100644 --- a/mm_session.c +++ b/mm_session.c @@ -378,7 +378,7 @@ int _mm_session_util_read_information(int app_pid, int *session_type, int *flags return MM_ERROR_NONE; } -void __session_signal_handler(int signo) +void __session_signal_handler(int signo, siginfo_t *siginfo, void *context) { char filename[MAX_FILE_LENGTH]; char str_error[256]; @@ -403,28 +403,40 @@ void __session_signal_handler(int signo) switch (signo) { case SIGINT: - sigaction(SIGINT, &session_int_old_action, NULL); - raise(signo); + if (session_int_old_action.sa_sigaction) + session_int_old_action.sa_sigaction(signo, siginfo, context); + else + sigaction(signo, &session_int_old_action, NULL); break; case SIGABRT: - sigaction(SIGABRT, &session_abrt_old_action, NULL); - raise(signo); + if (session_abrt_old_action.sa_sigaction) + session_abrt_old_action.sa_sigaction(signo, siginfo, context); + else + sigaction(signo, &session_abrt_old_action, NULL); break; case SIGSEGV: - sigaction(SIGSEGV, &session_segv_old_action, NULL); - raise(signo); + if (session_segv_old_action.sa_sigaction) + session_segv_old_action.sa_sigaction(signo, siginfo, context); + else + sigaction(signo, &session_segv_old_action, NULL); break; case SIGTERM: - sigaction(SIGTERM, &session_term_old_action, NULL); - raise(signo); + if (session_term_old_action.sa_sigaction) + session_term_old_action.sa_sigaction(signo, siginfo, context); + else + sigaction(signo, &session_term_old_action, NULL); break; case SIGSYS: - sigaction(SIGSYS, &session_sys_old_action, NULL); - raise(signo); + if (session_sys_old_action.sa_sigaction) + session_sys_old_action.sa_sigaction(signo, siginfo, context); + else + sigaction(signo, &session_sys_old_action, NULL); break; case SIGXCPU: - sigaction(SIGXCPU, &session_xcpu_old_action, NULL); - raise(signo); + if (session_xcpu_old_action.sa_sigaction) + session_xcpu_old_action.sa_sigaction(signo, siginfo, context); + else + sigaction(signo, &session_xcpu_old_action, NULL); break; default: break; @@ -437,8 +449,8 @@ __attribute__ ((constructor)) void __mmsession_initialize(void) { struct sigaction session_action; - session_action.sa_handler = __session_signal_handler; - session_action.sa_flags = SA_NOCLDSTOP; + session_action.sa_sigaction = __session_signal_handler; + session_action.sa_flags = SA_NOCLDSTOP | SA_SIGINFO; debug_fenter(); diff --git a/packaging/libmm-session.spec b/packaging/libmm-session.spec index 40c5194..6c9507f 100644 --- a/packaging/libmm-session.spec +++ b/packaging/libmm-session.spec @@ -1,6 +1,6 @@ Name: libmm-session Summary: Multimedia Session Library -Version: 0.2.11 +Version: 0.2.12 Release: 0 Group: Multimedia/Libraries License: Apache-2.0