Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1181,7 +1181,8 @@ class Application : public virtual InitialApplicationData,
* @brief Get list of available application extensions
* @return application extensions
*/
virtual const std::list<AppExtensionPtr>& Extensions() const = 0;
virtual const DataAccessor<std::list<AppExtensionPtr> > Extensions()
const = 0;

/**
* @brief Get cloud app endpoint for websocket connection
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -555,7 +555,7 @@ class ApplicationImpl : public virtual Application,
*/
bool RemoveExtension(AppExtensionUID uid) OVERRIDE;

const std::list<AppExtensionPtr>& Extensions() const OVERRIDE;
const DataAccessor<std::list<AppExtensionPtr> > Extensions() const OVERRIDE;

std::string hash_val_;
uint32_t grammar_id_;
Expand Down Expand Up @@ -617,6 +617,7 @@ class ApplicationImpl : public virtual Application,
Timer audio_stream_suspend_timer_;

std::list<AppExtensionPtr> extensions_;
mutable std::shared_ptr<sync_primitives::RecursiveLock> extensions_lock_;

// Cloud app properties
std::string endpoint_;
Expand Down Expand Up @@ -644,7 +645,6 @@ class ApplicationImpl : public virtual Application,
CommandSoftButtonID cmd_softbuttonid_;
// Lock for command soft button id
sync_primitives::Lock cmd_softbuttonid_lock_;
mutable std::shared_ptr<sync_primitives::Lock> vi_lock_ptr_;
mutable std::shared_ptr<sync_primitives::Lock> button_lock_ptr_;
std::string folder_name_;
ApplicationManager& application_manager_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1023,8 +1023,6 @@ class ApplicationManagerImpl
rpc_service_ = std::move(rpc_service);
}

bool is_stopping() const OVERRIDE;

bool is_audio_pass_thru_active() const OVERRIDE;
/*
* @brief Function Should be called when Low Voltage is occured
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,8 @@ class Command {
*/
virtual void SetAllowedToTerminate(const bool allowed) = 0;

virtual const ApplicationManager& GetApplicationManager() const = 0;

enum CommandSource {
SOURCE_SDL,
SOURCE_MOBILE,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,8 @@ class CommandImpl : public Command {
*/
void SetAllowedToTerminate(const bool allowed) OVERRIDE;

const ApplicationManager& GetApplicationManager() const OVERRIDE;

void OnUpdateTimeOut() OVERRIDE;

/**
Expand Down
42 changes: 35 additions & 7 deletions src/components/application_manager/src/application_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -148,8 +148,8 @@ ApplicationImpl::ApplicationImpl(
"AudioStreamSuspend",
new ::timer::TimerTaskImpl<ApplicationImpl>(
this, &ApplicationImpl::OnAudioStreamSuspend))
, extensions_lock_(std::make_shared<sync_primitives::RecursiveLock>())
, hybrid_app_preference_(mobile_api::HybridAppPreference::INVALID_ENUM)
, vi_lock_ptr_(std::make_shared<sync_primitives::Lock>())
, button_lock_ptr_(std::make_shared<sync_primitives::Lock>())
, application_manager_(application_manager) {
cmd_number_to_time_limits_[mobile_apis::FunctionID::ReadDIDID] = {
Expand Down Expand Up @@ -177,13 +177,27 @@ ApplicationImpl::~ApplicationImpl() {
delete active_message_;
active_message_ = NULL;
}

button_lock_ptr_->Acquire();
subscribed_buttons_.clear();
button_lock_ptr_->Release();
{
sync_primitives::AutoLock lock(cmd_softbuttonid_lock_);
cmd_softbuttonid_.clear();
}
cmd_number_to_time_limits_.clear();

if (is_perform_interaction_active()) {
set_perform_interaction_active(0);
set_perform_interaction_mode(-1);
}
CleanupFiles();
sync_primitives::AutoLock lock(mobile_message_lock_);
mobile_message_queue_.clear();
{
extensions_lock_->Acquire();
extensions_.clear();
extensions_lock_->Release();
}
}

void ApplicationImpl::CloseActiveMessage() {
Expand Down Expand Up @@ -1301,12 +1315,15 @@ void ApplicationImpl::set_hmi_level(
}

AppExtensionPtr ApplicationImpl::QueryInterface(AppExtensionUID uid) {
extensions_lock_->Acquire();
std::list<AppExtensionPtr>::const_iterator it = extensions_.begin();
for (; it != extensions_.end(); ++it) {
if ((*it)->uid() == uid) {
extensions_lock_->Release();
return (*it);
}
}
extensions_lock_->Release();
return AppExtensionPtr();
}

Expand All @@ -1315,29 +1332,38 @@ bool ApplicationImpl::AddExtension(AppExtensionPtr extension) {
if (!QueryInterface(extension->uid())) {
SDL_LOG_TRACE("Add extenstion to add id" << app_id() << " with uid "
<< extension->uid());
extensions_lock_->Acquire();
extensions_.push_back(extension);
extensions_lock_->Release();
return true;
}
return false;
}

bool ApplicationImpl::RemoveExtension(AppExtensionUID uid) {
SDL_LOG_AUTO_TRACE();
extensions_lock_->Acquire();
auto it = std::find_if(
extensions_.begin(), extensions_.end(), [uid](AppExtensionPtr extension) {
return extension->uid() == uid;
});

if (extensions_.end() != it) {
extensions_.erase(it);
extensions_lock_->Release();
return true;
}

extensions_lock_->Release();
return false;
}

const std::list<AppExtensionPtr>& ApplicationImpl::Extensions() const {
return extensions_;
const DataAccessor<std::list<AppExtensionPtr> > ApplicationImpl::Extensions()
const {
extensions_lock_->Acquire();
DataAccessor<std::list<AppExtensionPtr> > accessor(extensions_,
extensions_lock_);
extensions_lock_->Release();
return accessor;
}

const std::string& ApplicationImpl::cloud_app_endpoint() const {
Expand Down Expand Up @@ -1403,14 +1429,16 @@ const smart_objects::SmartObject& ApplicationImpl::get_user_location() const {

void ApplicationImpl::PushMobileMessage(
smart_objects::SmartObjectSPtr mobile_message) {
sync_primitives::AutoLock lock(mobile_message_lock_);
mobile_message_lock_.Acquire();
mobile_message_queue_.push_back(mobile_message);
mobile_message_lock_.Release();
}

void ApplicationImpl::SwapMobileMessageQueue(
MobileMessageQueue& mobile_messages) {
sync_primitives::AutoLock lock(mobile_message_lock_);
mobile_message_lock_.Acquire();
mobile_messages.swap(mobile_message_queue_);
mobile_message_lock_.Release();
}

} // namespace application_manager
34 changes: 29 additions & 5 deletions src/components/application_manager/src/application_manager_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -256,8 +256,36 @@ ApplicationManagerImpl::~ApplicationManagerImpl() {
streaming_timer_pool_.clear();
}

{
sync_primitives::AutoLock lock(navi_service_status_lock_);
navi_service_status_.clear();
}

{
sync_primitives::AutoLock lock(tts_global_properties_app_list_lock_);
tts_global_properties_app_list_.clear();
}

{
sync_primitives::AutoLock lock(apps_to_register_list_lock_ptr_);
apps_to_register_.clear();
}

{
sync_primitives::AutoLock lock(reregister_wait_list_lock_ptr_);
reregister_wait_list_.erase(reregister_wait_list_.begin(),
reregister_wait_list_.end());
}

{
sync_primitives::AutoLock lock(query_apps_devices_lock_);
query_apps_devices_.clear();
}
clear_pool_timer_.Stop();
secondary_transport_devices_cache_.clear();
applications_list_lock_ptr_->Acquire();
applications_.clear();
applications_list_lock_ptr_->Release();
}

DataAccessor<ApplicationSet> ApplicationManagerImpl::applications() const {
Expand Down Expand Up @@ -984,7 +1012,7 @@ void ApplicationManagerImpl::RefreshCloudAppInformation() {
return;
#else
SDL_LOG_AUTO_TRACE();
if (is_stopping()) {
if (IsStopping()) {
return;
}
std::vector<std::string> enabled_apps;
Expand Down Expand Up @@ -3504,10 +3532,6 @@ mobile_apis::Result::eType ApplicationManagerImpl::CheckPolicyPermissions(
return mobile_api::Result::SUCCESS;
}

bool ApplicationManagerImpl::is_stopping() const {
return is_stopping_;
}

bool ApplicationManagerImpl::is_audio_pass_thru_active() const {
return audio_pass_thru_active_;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,10 @@ void CommandImpl::SetAllowedToTerminate(const bool allowed) {
allowed_to_terminate_ = allowed;
}

const ApplicationManager& CommandImpl::GetApplicationManager() const {
return application_manager_;
}

bool CommandImpl::CheckAllowedParameters(const Command::CommandSource source) {
SDL_LOG_AUTO_TRACE();

Expand Down
Loading