} // namespace
+/* \warning It need to be called inside critical section guarded by launch_app_control_set_mutex_*/
void ApplicationManager::TryRelease(LaunchAppControlCallbackData* callback_data) {
if (0 == --callback_data->reference_count) {
LoggerD("Releasing callback_data: %p", callback_data);
- std::lock_guard<std::mutex> lock(launch_app_control_set_mutex_);
launch_app_control_set_global_.erase(callback_data);
callback_data->manager->launch_app_control_set_.erase(callback_data);
delete callback_data;
// Not releasing callback_data here - it was already released in destructor
return;
}
- }
- picojson::value return_value = picojson::value(picojson::object());
- picojson::object& return_value_obj = return_value.get<picojson::object>();
- return_value_obj.insert(
- std::make_pair(kListenerId, picojson::value(callback_data->reply_callback_id)));
-
- if (APP_CONTROL_RESULT_SUCCEEDED == result) {
- LoggerD("App started");
- return_value_obj.insert(std::make_pair("data", picojson::value(picojson::array())));
- if (!utils::ServiceToApplicationControlDataArray(
- reply, &return_value_obj.find("data")->second.get<picojson::array>())) {
- return_value_obj.erase("data");
+ picojson::value return_value = picojson::value(picojson::object());
+ picojson::object& return_value_obj = return_value.get<picojson::object>();
+ return_value_obj.insert(
+ std::make_pair(kListenerId, picojson::value(callback_data->reply_callback_id)));
+
+ if (APP_CONTROL_RESULT_SUCCEEDED == result) {
+ LoggerD("App started");
+ return_value_obj.insert(std::make_pair("data", picojson::value(picojson::array())));
+ if (!utils::ServiceToApplicationControlDataArray(
+ reply, &return_value_obj.find("data")->second.get<picojson::array>())) {
+ return_value_obj.erase("data");
+ }
+ ReportSuccess(return_value_obj);
+ } else {
+ ReportError(return_value_obj);
}
- ReportSuccess(return_value_obj);
- } else {
- ReportError(return_value_obj);
- }
- Instance::PostMessage(callback_data->instance, return_value.serialize().c_str());
- TryRelease(callback_data);
+ Instance::PostMessage(callback_data->instance, return_value.serialize().c_str());
+ TryRelease(callback_data);
+ }
};
}
// Not releasing callback_data here - it was already released in destructor
return;
}
- }
- auto result = utils::TranslateAppControlError(launch_result);
+ auto result = utils::TranslateAppControlError(launch_result);
- if (result.IsError()) {
- LogAndReportError(result, &(callback_data->response->get<picojson::object>()));
- } else {
- ReportSuccess(callback_data->response->get<picojson::object>());
- }
+ if (result.IsError()) {
+ LogAndReportError(result, &(callback_data->response->get<picojson::object>()));
+ } else {
+ ReportSuccess(callback_data->response->get<picojson::object>());
+ }
- Instance::PostMessage(callback_data->instance, callback_data->response->serialize().c_str());
+ Instance::PostMessage(callback_data->instance, callback_data->response->serialize().c_str());
- TryRelease(callback_data);
+ TryRelease(callback_data);
+ }
};
/*