diff options
author | Vitaliy Cherepanov <v.cherepanov@samsung.com> | 2014-12-09 15:37:21 +0300 |
---|---|---|
committer | Vitaliy Andreevich <v.cherepanov@samsung.com> | 2014-12-23 00:55:07 -0800 |
commit | d42aa2e38f9238113880d849e03fb7d92b784160 (patch) | |
tree | edddb80369684082b34907e8137c765e8f9d080e | |
parent | 43e76a00fceb3f8036767c5138067a6c4de3e767 (diff) | |
download | swap-manager-d42aa2e38f9238113880d849e03fb7d92b784160.tar.gz swap-manager-d42aa2e38f9238113880d849e03fb7d92b784160.tar.bz2 swap-manager-d42aa2e38f9238113880d849e03fb7d92b784160.zip |
[FIX] spank spank
ecore spank on doble app launch timer
Change-Id: Iea0162678883bc3534a1f7495a2dd87b596bca6a
Signed-off-by: Vitaliy Cherepanov <v.cherepanov@samsung.com>
-rw-r--r-- | daemon/daemon.c | 54 |
1 files changed, 47 insertions, 7 deletions
diff --git a/daemon/daemon.c b/daemon/daemon.c index 73eb781..3c5f4a0 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -75,20 +75,46 @@ // ============================================================================= static Ecore_Fd_Handler *launch_timer_handler; +static pthread_mutex_t launch_timer_mutex = PTHREAD_MUTEX_INITIALIZER; + +static void launch_timer_lock() +{ + LOGI("lock launch_timer_mutex\n"); + pthread_mutex_lock(&launch_timer_mutex); + LOGI("locked launch_timer_mutex\n"); +} + +static void launch_timer_unlock() +{ + pthread_mutex_unlock(&launch_timer_mutex); + LOGI("unlock launch_timer_mutex\n"); +} //stop application launch timer static int stop_app_launch_timer() { - close(manager.app_launch_timerfd); - manager.app_launch_timerfd = -1; + int res = 0; + launch_timer_lock(); - return 0; + if (manager.app_launch_timerfd > 0) { + ecore_main_fd_handler_del(launch_timer_handler); + if (close(manager.app_launch_timerfd)) { + LOGE("close app_launch_timerfd failed\n"); + res = 1; + } + manager.app_launch_timerfd = -1; + } else { + LOGW("trying to stop app launch timer when it stoped\n"); + } + + launch_timer_unlock(); + return res; } static Eina_Bool launch_timer_cb(void *data, Ecore_Fd_Handler *fd_handler) { LOGE("Failed to launch application\n"); - if (stop_app_launch_timer() < 0) + if (stop_app_launch_timer()) LOGE("cannot stop app launch timer\n"); return ECORE_CALLBACK_CANCEL; @@ -104,6 +130,13 @@ static int start_app_launch_timer(int apps_count) if (apps_count == 0) return res; + if (manager.app_launch_timerfd > 0) { + LOGI("stop previous app launch timer\n"); + stop_app_launch_timer(); + } + + launch_timer_lock(); + manager.app_launch_timerfd = timerfd_create(CLOCK_REALTIME, TFD_CLOEXEC); if (manager.app_launch_timerfd > 0) { @@ -114,8 +147,8 @@ static int start_app_launch_timer(int apps_count) ctime.it_interval.tv_nsec = 0; if (timerfd_settime(manager.app_launch_timerfd, 0, &ctime, NULL) < 0) { LOGE("fail to set app launch timer\n"); - stop_app_launch_timer(); res = -1; + goto unlock_and_stop; } else { launch_timer_handler = ecore_main_fd_handler_add(manager.app_launch_timerfd, @@ -125,8 +158,8 @@ static int start_app_launch_timer(int apps_count) NULL, NULL); if (!launch_timer_handler) { LOGE("fail to add app launch timer fd to \n"); - stop_app_launch_timer(); res = -2; + goto unlock_and_stop; } else { LOGI("application launch time started\n"); } @@ -136,6 +169,13 @@ static int start_app_launch_timer(int apps_count) res = -3; } + launch_timer_unlock(); + return res; + +unlock_and_stop: + launch_timer_unlock(); + + stop_app_launch_timer(); return res; } @@ -678,7 +718,7 @@ static int targetServerHandler(void) dec_apps_to_run(); if ((manager.app_launch_timerfd > 0) && (get_apps_to_run() == 0)) { - if (stop_app_launch_timer() < 0) + if (stop_app_launch_timer()) LOGE("cannot stop app launch timer\n"); } |