r = pkgmgrinfo_appinfo_get_installed_list(__app_info_insert_handler, cf);
- return 0;
+ return r;
}
static struct appinfomgr *_init()
}
if (pid > 0) {
- if (caller_pid == pid) {
+ if (_status_get_app_info_status(pid) == STATUS_DYING) {
+ pid = -ETERMINATING;
+ } else if (caller_pid == pid) {
_D("caller process & callee process is same.[%s:%d]", appid, pid);
pid = -ELOCALLAUNCH_ID;
} else if ((ret = __nofork_processing(cmd, pid, kb)) < 0) {
__real_send(fd, pid);
if(pid > 0) {
- //_status_add_app_info_list(appid, app_path, pid);
+ _status_add_app_info_list(appid, app_path, pid);
ret = ac_server_check_launch_privilege(appid, appinfo_get_value(ai, AIT_TYPE), pid);
return ret != AC_R_ERROR ? pid : -1;
}
#include <glib.h>
#include <aul.h>
#include <string.h>
+#include <Ecore.h>
#include "amd_config.h"
#include "amd_status.h"
return 0;
}
+static Eina_Bool __app_terminate_timer_cb(void *data)
+{
+ app_status_info_t *info_t = (app_status_info_t *)data;
+ int ret = 0;
+
+ ret = kill(info_t->pid, SIGKILL);
+ if (ret == -1)
+ _E("send SIGKILL: %s", strerror(errno));
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
int _status_update_app_info_list(int pid, int status)
{
GSList *iter = NULL;
info_t = (app_status_info_t *)iter->data;
if(pid == info_t->pid) {
info_t->status = status;
+ if(status == STATUS_DYING) {
+ ecore_timer_add(2, __app_terminate_timer_cb, info_t);
+ }
break;
}
}
return 0;
}
+int _status_get_app_info_status(int pid)
+{
+ GSList *iter = NULL;
+ app_status_info_t *info_t = NULL;
+
+ for (iter = app_status_info_list; iter != NULL; iter = g_slist_next(iter))
+ {
+ info_t = (app_status_info_t *)iter->data;
+ if(pid == info_t->pid) {
+ return info_t->status;
+ }
+ }
+}
+
+
int _status_app_is_running(char *appid)
{
GSList *iter = NULL;
int _status_add_app_info_list(char *appid, char *app_path, int pid);
int _status_update_app_info_list(int pid, int status);
int _status_remove_app_info_list(int pid);
+int _status_get_app_info_status(int pid);
int _status_app_is_running(char *appid);
int _status_send_running_appinfo(int fd);
int _status_app_is_running_v2(char *appid);
#define WEB_LAUNCHPAD_PID -3
#define ELOCALLAUNCH_ID 128
#define EILLEGALACCESS 127
+#define ETERMINATING 126
+
typedef struct _app_pkt_t {
* @brief Return values in AUL.
*/
typedef enum _aul_return_val {
+ AUL_R_ETERMINATING = -9, /**< application terminating */
AUL_R_EILLACC = -8, /**< Illegal Access */
AUL_R_LOCAL = -7, /**< Launch by himself */
AUL_R_ETIMEOUT = -6, /**< Timeout */
Name: aul
Summary: App utility library
-Version: 0.0.260
+Version: 0.0.261
Release: 1
Group: System/Libraries
License: Apache License, Version 2.0
case -EILLEGALACCESS:
res = AUL_R_EILLACC;
break;
+ case -ETERMINATING:
+ res = AUL_R_ETERMINATING;
+ break;
default:
res = AUL_R_ERROR;
}