return -1;
return amd::AppStatusManager::GetInst().RegisterPID(
- pid, appid, uid, pid);
+ pid, appid, uid, pid, 0);
}
static int DispatchAppRunningInfo(request_h request) {
_W("[APP_REGISTER_PID] appid(%s), pid(%d)", appid.c_str(), pid);
return amd::AppStatusManager::GetInst().RegisterPID(
- pid, appid, target_uid, req->GetPID());
+ pid, appid, target_uid, req->GetPID(), req->GetID());
}
static int DispatchAppRunningInstanceInfo(request_h request) {
auto& manager = amd::AppStatusManager::GetInst();
auto handle = manager.Find(pid);
if (handle == nullptr) {
+ auto& b = req->GetBundle();
+ auto req_id_str = b->GetString(AUL_K_REQUEST_ID);
+ unsigned int req_id = std::stoul(req_id_str);
uid_t uid = req->GetUID();
if (uid >= REGULAR_UID_MIN) {
std::string appid = GetAppIdFromFile(pid, uid);
- _W("appid(%s), pid(%d), uid(%u)", appid.c_str(), pid, uid);
- manager.RegisterPID(pid, appid, uid, pid);
+ _W("appid(%s), pid(%d), uid(%u), req_id(%u)", appid.c_str(), pid, uid,
+ req_id);
+ manager.RegisterPID(pid, appid, uid, pid, req_id);
handle = manager.Find(pid);
if (handle == nullptr) {
_E("Failed to register pid(%d)", pid);
}
int AppStatusManager::RegisterPID(int pid, const std::string& appid,
- uid_t uid, int caller_pid) {
+ uid_t uid, int caller_pid, unsigned int req_id) {
auto app_info = AppInfoManager::GetInst().FindAppInfo(uid, appid);
if (app_info == nullptr) {
_E("Failed to find appinfo. %s:%u", appid.c_str(), uid);
}
auto pending_item = RequestManager::GetInst().FindPendingItem(appid);
- if (pending_item != nullptr && pending_item->GetPid() != pid) {
+ if (pending_item != nullptr && pending_item->GetPid() != pid &&
+ pending_item->GetRequestId() != req_id) {
_W("pending_item has already been created. kill(%d)", pid);
kill(pid, SIGKILL);
return -1;
int PublishStatus(int pid, int context_status);
void CleanUp(AppStatusPtr app);
- int RegisterPID(int pid, const std::string& appid, uid_t uid, int caller_pid);
+ int RegisterPID(int pid, const std::string& appid, uid_t uid, int caller_pid,
+ unsigned int req_id);
int TerminateBackgroundApps(GCompareFunc func);
AppStatusPtr AddAppInfo(LaunchContext* context);
bundle_del(b, AUL_K_MULTIPLE_INSTANCE_APPID);
bundle_add(b, AUL_K_MULTIPLE_INSTANCE_APPID, context->GetAppId().c_str());
}
+
+ bundle_del(b, AUL_K_REQUEST_ID);
+ bundle_add(b, AUL_K_REQUEST_ID,
+ std::to_string(context->GetRequestId()).c_str());
}
int FakeLaunchApp(LaunchContext* context) {