From: Jihoon Chung Date: Mon, 22 Apr 2013 13:08:53 +0000 (+0900) Subject: Add routine terminated application when update application X-Git-Tag: 2.1b_release^2~16 X-Git-Url: http://review.tizen.org/git/?p=framework%2Fweb%2Fwrt-installer.git;a=commitdiff_plain;h=4ee30a4b6437c7ed7363b064b59782d0643dd3b4 Add routine terminated application when update application [Issue#] N/A [Problem] N/A [Cause] N/A [Solution] Terminate application when update application. [SCMRequest] N/A Change-Id: Id019472d5ed67d7cb7e400aa20ea6f77d89a3bcc --- diff --git a/src/jobs/widget_install/job_widget_install.cpp b/src/jobs/widget_install/job_widget_install.cpp old mode 100755 new mode 100644 index 9e76928..239f8d1 --- a/src/jobs/widget_install/job_widget_install.cpp +++ b/src/jobs/widget_install/job_widget_install.cpp @@ -588,14 +588,62 @@ ConfigureResult JobWidgetInstall::checkWidgetUpdate( // Check running state bool isRunning = false; - int retval = + int ret = app_manager_is_running(DPL::ToUTF8String(update.tzAppId).c_str(), &isRunning); - if (APP_MANAGER_ERROR_NONE != retval || isRunning) { + if (APP_MANAGER_ERROR_NONE != ret) { LogError("Fail to get running state"); return ConfigureResult::Failed_WidgetRunning; } + if (true == isRunning) { + // get app_context for running application + // app_context must be released with app_context_destroy + app_context_h appCtx = NULL; + ret = + app_manager_get_app_context( + DPL::ToUTF8String(update.tzAppId).c_str(), + &appCtx); + if (APP_MANAGER_ERROR_NONE != ret) { + LogError("Fail to get app_context"); + return ConfigureResult::Failed_WidgetRunning; + } + + // terminate app_context_h + ret = app_manager_terminate_app(appCtx); + if (APP_MANAGER_ERROR_NONE != ret) { + LogError("Fail to terminate running application"); + app_context_destroy(appCtx); + return ConfigureResult::Failed_WidgetRunning; + } else { + app_context_destroy(appCtx); + // app_manager_terminate_app isn't sync API + // wait until application isn't running (50ms * 100) + bool isStillRunning = true; + int checkingloop = 100; + struct timespec duration = { 0, 50 * 1000 * 1000 }; + while (--checkingloop >= 0) { + nanosleep(&duration, NULL); + int ret = + app_manager_is_running( + DPL::ToUTF8String(update.tzAppId).c_str(), + &isStillRunning); + if (APP_MANAGER_ERROR_NONE != ret) { + LogError("Fail to get running state"); + return ConfigureResult::Failed_WidgetRunning; + } + if (!isStillRunning) { + break; + } + } + if (isStillRunning) { + LogError("Fail to terminate running application"); + return ConfigureResult::Failed_WidgetRunning; + } + LogInfo("terminate application"); + } + } + m_installerContext.widgetConfig.tzAppid = update.tzAppId; if (isUpperVersion(update.existingVersion, update.incomingVersion) || diff --git a/src/jobs/widget_uninstall/task_check.cpp b/src/jobs/widget_uninstall/task_check.cpp index 09d9116..bb6a73b 100644 --- a/src/jobs/widget_uninstall/task_check.cpp +++ b/src/jobs/widget_uninstall/task_check.cpp @@ -19,7 +19,7 @@ * @version 1.0 * @brief Header file for widget uninstall task check */ -#include +#include #include #include #include