summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorinhyeok <i_bc.kim@samsung.com>2015-10-12 11:01:21 +0900
committerinhyeok <i_bc.kim@samsung.com>2015-10-12 11:24:53 +0900
commit5f88cf9d242a8319aa6d9346ba17ec43c67dda6f (patch)
treeacfffb27afa43b51b5ad0bd3bff217f375768176
parentb01ac16c27453982b37e4d6f849eade79a08e2a7 (diff)
downloadlibmm-session-5f88cf9d242a8319aa6d9346ba17ec43c67dda6f.tar.gz
libmm-session-5f88cf9d242a8319aa6d9346ba17ec43c67dda6f.tar.bz2
libmm-session-5f88cf9d242a8319aa6d9346ba17ec43c67dda6f.zip
[Version] Release 0.2.8 [Profile] Common [Issue Type] Add features As ASM deprecated in 3.0, signal handler is implemented in mm_session library Change-Id: Ic08a0484c95966bb0696beb6e1b39c794d67d59c Signed-off-by: inhyeok <i_bc.kim@samsung.com>
-rw-r--r--mm_session.c108
-rw-r--r--packaging/libmm-session.spec2
2 files changed, 99 insertions, 11 deletions
diff --git a/mm_session.c b/mm_session.c
index d481e3e..f37ff98 100644
--- a/mm_session.c
+++ b/mm_session.c
@@ -30,12 +30,20 @@
#include <errno.h>
#include <glib.h>
#include <pthread.h>
+#include <signal.h>
#define EXPORT_API __attribute__((__visibility__("default")))
#define MAX_FILE_LENGTH 256
int g_session_type = -1;
+struct sigaction session_int_old_action;
+struct sigaction session_abrt_old_action;
+struct sigaction session_segv_old_action;
+struct sigaction session_term_old_action;
+struct sigaction session_sys_old_action;
+struct sigaction session_xcpu_old_action;
+
EXPORT_API
int mm_session_init(int sessiontype)
{
@@ -296,7 +304,7 @@ int _mm_session_util_delete_information(int app_pid)
mypid = (pid_t)app_pid;
////// DELETE SESSION TYPE /////////
- snprintf(filename, sizeof(filename)-1, "/tmp/mm_session_%d",mypid);
+ snprintf(filename, sizeof(filename)-1, "/tmp/mm_session_%d", mypid);
if(-1 == unlink(filename))
return MM_ERROR_FILE_NOT_FOUND;
////// DELETE SESSION TYPE /////////
@@ -321,7 +329,7 @@ int _mm_session_util_write_type(int app_pid, int sessiontype)
mypid = (pid_t)app_pid;
////// WRITE SESSION TYPE /////////
- snprintf(filename, sizeof(filename)-1, "/tmp/mm_session_%d",mypid);
+ snprintf(filename, sizeof(filename)-1, "/tmp/mm_session_%d", mypid);
fd = open(filename, O_WRONLY | O_CREAT, 0644 );
if(fd < 0) {
debug_error("open() failed with %d",errno);
@@ -358,7 +366,7 @@ int _mm_session_util_read_type(int app_pid, int *sessiontype)
mypid = (pid_t)app_pid;
////// READ SESSION TYPE /////////
- snprintf(filename, sizeof(filename)-1, "/tmp/mm_session_%d",mypid);
+ snprintf(filename, sizeof(filename)-1, "/tmp/mm_session_%d", mypid);
fd = open(filename, O_RDONLY);
if(fd < 0) {
return MM_ERROR_INVALID_HANDLE;
@@ -396,7 +404,7 @@ int _mm_session_util_write_information(int app_pid, int session_type, int flags)
}
////// WRITE SESSION INFO /////////
- snprintf(filename, sizeof(filename)-1, "/tmp/mm_session_%d",mypid);
+ snprintf(filename, sizeof(filename)-1, "/tmp/mm_session_%d", mypid);
fd = open(filename, O_WRONLY | O_CREAT, 0644 );
if(fd < 0) {
debug_error("open() failed with %d",errno);
@@ -437,7 +445,7 @@ int _mm_session_util_read_information(int app_pid, int *session_type, int *flags
}
////// READ SESSION INFO /////////
- snprintf(filename, sizeof(filename)-1, "/tmp/mm_session_%d",mypid);
+ snprintf(filename, sizeof(filename)-1, "/tmp/mm_session_%d", mypid);
fd = open(filename, O_RDONLY);
if(fd < 0) {
return MM_ERROR_INVALID_HANDLE;
@@ -455,19 +463,99 @@ int _mm_session_util_read_information(int app_pid, int *session_type, int *flags
return MM_ERROR_NONE;
}
-__attribute__ ((destructor))
-void __mmsession_finalize(void)
+void __session_signal_handler(int signo)
{
- debug_fenter();
+ char* filename = NULL;
+ char str_error[256];
- _mm_session_util_delete_information(-1);
+ debug_warning("ENTER, sig.num(%d)", signo);
- debug_fleave();
+ /* signal block -------------- */
+ sigset_t old_mask, all_mask;
+ sigfillset(&all_mask);
+ sigprocmask(SIG_BLOCK, &all_mask, &old_mask);
+
+ filename = g_strdup_printf("/tmp/mm_session_%d", getpid());
+ if (!remove(filename)) {
+ debug_log(" remove %s success\n", filename);
+ } else {
+ strerror_r (errno, str_error, sizeof (str_error));
+ debug_error(" remove %s failed with %s\n", filename, str_error);
+ }
+
+ g_free(filename);
+
+ sigprocmask(SIG_SETMASK, &old_mask, NULL);
+ /* signal unblock ------------ */
+
+ switch (signo) {
+ case SIGINT:
+ sigaction(SIGINT, &session_int_old_action, NULL);
+ raise(signo);
+ break;
+ case SIGABRT:
+ sigaction(SIGABRT, &session_abrt_old_action, NULL);
+ raise(signo);
+ break;
+ case SIGSEGV:
+ sigaction(SIGSEGV, &session_segv_old_action, NULL);
+ raise(signo);
+ break;
+ case SIGTERM:
+ sigaction(SIGTERM, &session_term_old_action, NULL);
+ raise(signo);
+ break;
+ case SIGSYS:
+ sigaction(SIGSYS, &session_sys_old_action, NULL);
+ raise(signo);
+ break;
+ case SIGXCPU:
+ sigaction(SIGXCPU, &session_xcpu_old_action, NULL);
+ raise(signo);
+ break;
+ default:
+ break;
+ }
+
+ debug_warning("LEAVE");
}
__attribute__ ((constructor))
void __mmsession_initialize(void)
{
+ struct sigaction session_action;
+ session_action.sa_handler = __session_signal_handler;
+ session_action.sa_flags = SA_NOCLDSTOP;
+
+ debug_fenter();
+
+ sigemptyset(&session_action.sa_mask);
+ sigaction(SIGINT, &session_action, &session_int_old_action);
+ sigaction(SIGABRT, &session_action, &session_abrt_old_action);
+ sigaction(SIGSEGV, &session_action, &session_segv_old_action);
+ sigaction(SIGTERM, &session_action, &session_term_old_action);
+ sigaction(SIGSYS, &session_action, &session_sys_old_action);
+ sigaction(SIGXCPU, &session_action, &session_xcpu_old_action);
+
+ debug_fleave();
+}
+
+__attribute__ ((destructor))
+void __mmsession_finalize(void)
+{
+
+ debug_fenter();
+
+ _mm_session_util_delete_information(-1);
+
+ sigaction(SIGINT, &session_int_old_action, NULL);
+ sigaction(SIGABRT, &session_abrt_old_action, NULL);
+ sigaction(SIGSEGV, &session_segv_old_action, NULL);
+ sigaction(SIGTERM, &session_term_old_action, NULL);
+ sigaction(SIGSYS, &session_sys_old_action, NULL);
+ sigaction(SIGXCPU, &session_xcpu_old_action, NULL);
+
+ debug_fleave();
}
diff --git a/packaging/libmm-session.spec b/packaging/libmm-session.spec
index c9b5bb5..ae1dd78 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.7
+Version: 0.2.8
Release: 0
Group: Multimedia/Libraries
License: Apache-2.0