summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mm_session.c42
-rw-r--r--packaging/libmm-session.spec2
2 files changed, 28 insertions, 16 deletions
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