If the request is pended, amd sends the result to the caller immediately.
Change-Id: I0307a428ddc3b075a3f59d260f1bb3efc96c84ff
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
unsigned int _request_generate_id(void) {
return amd::Request::GenerateRequestID();
}
+
+int _request_check_status(request_h req) {
+ if (req == nullptr) return -1;
+
+ auto req_ptr = static_cast<amd::Request*>(req)->GetSharedPtr();
+ return static_cast<int>(amd::RequestManager::GetInst().CheckStatus(req_ptr));
+}
+
+void _request_set_option(request_h req, int opt) {
+ if (req == nullptr) return;
+
+ static_cast<amd::Request*>(req)->SetOption(opt);
+}
+
+int _request_get_option(request_h req) {
+ if (req == nullptr) return 0;
+
+ return static_cast<amd::Request*>(req)->GetOption();
+}
unsigned int _request_generate_id(void);
+int _request_check_status(request_h req);
+
+void _request_set_option(request_h req, int opt);
+
+int _request_get_option(request_h req);
+
#ifdef __cplusplus
}
#endif
amd_request_h req) {
return _request_get_request_type(req);
}
+
+extern "C" EXPORT_API int amd_request_check_status(amd_request_h req) {
+ return _request_check_status(req);
+}
+
+extern "C" EXPORT_API void amd_request_set_option(amd_request_h req, int opt) {
+ _request_set_option(req, opt);
+}
+
+extern "C" EXPORT_API int amd_request_get_option(amd_request_h req) {
+ return _request_get_option(req);
+}
typedef void *amd_request_reply_h;
+typedef enum {
+ AMD_REQUEST_STATUS_INVALID = -1,
+ AMD_REQUEST_STATUS_NORMAL = 0,
+ AMD_REQUEST_STATUS_PENDING = 1,
+} amd_request_status_e;
+
int amd_request_send_result(amd_request_h req, int res);
int amd_request_send_raw(amd_request_h req, int cmd, unsigned char *data,
const char *amd_request_get_request_type(amd_request_h req);
+int amd_request_check_status(amd_request_h req);
+
+void amd_request_set_option(amd_request_h req, int opt);
+
+int amd_request_get_option(amd_request_h req);
+
#ifdef __cplusplus
}
#endif
b_->Add(AUL_K_REQUEST_TYPE, type);
}
+void Request::SetOption(int opt) { opt_ = opt; }
+
int Request::GetOption() const {
return opt_;
}
bool CheckCritical() const;
std::string GetRequestType() const;
void SetRequestType(const std::string& type);
+ void SetOption(int opt);
int GetOption() const;
unsigned int GetTimeout() const;
amd_request_set_request_type(req, "rpc-port");
amd_request_set_cmd(req, APP_START_ASYNC);
+ int opt = amd_request_get_option(req);
+ amd_request_set_option(req, opt | AUL_SOCK_QUEUE);
+
+ if (amd_request_check_status(req) == AMD_REQUEST_STATUS_PENDING) {
+ request_ids.insert(amd_request_get_id(req));
+ _E("request(%u) is pending", amd_request_get_id(req));
+ auto app_status = amd_app_status_find_by_appid(app_id.c_str(), target_uid);
+ if (app_status && amd_app_status_get_status(app_status) != STATUS_DYING)
+ amd_request_send_result(req, amd_app_status_get_pid(app_status));
+
+ return 0;
+ }
bool pending = false;
bool dummy_bg_launch = false;
if (pending) {
request_ids.insert(amd_request_get_id(req));
- _D("Pending request: %u",amd_request_get_id(req));
+ _D("Pending request: %u", amd_request_get_id(req));
return 0;
}
char* token = strtok_r(str, "|", &saveptr);
while (token) {
if (info->Match(token))
- return -1; // To break metadata iteration
+ return -1; // To break metadata iteration
token = strtok_r(nullptr, "|", &saveptr);
}