Do not raise() inside signal handler 86/144886/2 accepted/tizen/4.0/unified/20170829.015758 accepted/tizen/unified/20170822.023845 submit/tizen/20170821.085338 submit/tizen_4.0/20170828.100004 submit/tizen_4.0/20170828.110004
authorSeungbae Shin <seungbae.shin@samsung.com>
Fri, 18 Aug 2017 07:55:47 +0000 (16:55 +0900)
committerSeungbae Shin <seungbae.shin@samsung.com>
Mon, 21 Aug 2017 04:32:13 +0000 (13:32 +0900)
[Version] 0.2.12
[Profile] Common
[Issue Type] Cleanup

Change-Id: Ic2094a74bc6ce02870076469088bf7fda39f1dc4

mm_session.c
packaging/libmm-session.spec

index c537787..a10fc5a 100644 (file)
@@ -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();
 
index 40c5194..6c9507f 100644 (file)
@@ -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