disable signal handler for VD dotnet application, cleanup will be done by external...
[platform/core/multimedia/libmm-session.git] / mm_session.c
index 1358df0..d605f1c 100644 (file)
@@ -30,6 +30,7 @@
 #include <errno.h>
 #include <pthread.h>
 #include <signal.h>
+#include <stdlib.h>
 
 #define EXPORT_API __attribute__((__visibility__("default")))
 #define MAX_FILE_LENGTH 256
@@ -383,23 +384,15 @@ int _mm_session_util_read_information(int app_pid, int *session_type, int *flags
 
 void __session_signal_handler(int signo, siginfo_t *siginfo, void *context)
 {
-       char filename[MAX_FILE_LENGTH];
-       char str_error[256];
+       sigset_t old_mask, all_mask;
 
-       debug_warning("ENTER, sig.num(%d)", signo);
+       debug_warning("ENTER, signo(%d), siginfo(%p), context(%p)", signo, siginfo, context);
 
        /* signal block -------------- */
-       sigset_t old_mask, all_mask;
        sigfillset(&all_mask);
        sigprocmask(SIG_BLOCK, &all_mask, &old_mask);
 
-       snprintf(filename, sizeof(filename) - 1, "/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);
-       }
+       _mm_session_util_delete_information(-1);
 
        sigprocmask(SIG_SETMASK, &old_mask, NULL);
        /* signal unblock ------------ */
@@ -448,15 +441,42 @@ void __session_signal_handler(int signo, siginfo_t *siginfo, void *context)
        debug_warning("LEAVE");
 }
 
+#ifdef TIZEN_TV
+EXPORT_API
+void mm_session_dotnet_cleanup(int signo)
+{
+       debug_warning("dotnet cleanup [%d]", signo);
+       _mm_session_util_delete_information(-1);
+
+}
+static bool _is_dotnet_app(void)
+{
+       char *is_dotnet = NULL;
+
+       is_dotnet = getenv("DOTNET_APP");
+       if (is_dotnet && atoi(is_dotnet) == 1)
+               return true;
+       else
+               return false;
+}
+#endif
+
 __attribute__ ((constructor))
 void __mmsession_initialize(void)
 {
        struct sigaction session_action;
-       session_action.sa_sigaction = __session_signal_handler;
-       session_action.sa_flags = SA_NOCLDSTOP | SA_SIGINFO;
 
        debug_fenter();
 
+#ifdef TIZEN_TV
+       if (_is_dotnet_app()) {
+               debug_warning("no signal handler for dotnet!!");
+               return;
+       }
+#endif
+       session_action.sa_sigaction = __session_signal_handler;
+       session_action.sa_flags = SA_NOCLDSTOP | SA_SIGINFO;
+
        sigemptyset(&session_action.sa_mask);
 
        sigaction(SIGINT, &session_action, &session_int_old_action);
@@ -476,7 +496,12 @@ void __mmsession_finalize(void)
        debug_fenter();
 
        _mm_session_util_delete_information(-1);
-
+#ifdef TIZEN_TV
+       if (_is_dotnet_app()) {
+               debug_warning("no signal handler for dotnet!!");
+               return;
+       }
+#endif
        sigaction(SIGINT, &session_int_old_action, NULL);
        sigaction(SIGABRT, &session_abrt_old_action, NULL);
        sigaction(SIGSEGV, &session_segv_old_action, NULL);