summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjacobkeeler <jacob.keeler@livioradio.com>2021-12-03 09:37:14 -0500
committerjacobkeeler <jacob.keeler@livioradio.com>2021-12-03 09:37:14 -0500
commit306024cccc972c7058d71d36bca7ab4170405a10 (patch)
treeb85c5fc7f2c43ca54077ce6ce75da2bcbe94d1a1
parent68f082169e0a40fccd9eb0db3c83911c28870f07 (diff)
downloadsdl_core-experimental/fix_timer_restart_issue.tar.gz
Create new app list timer instead of restartingexperimental/fix_timer_restart_issue
Fixes issue with Android where the app list timer would not fire after being started more than once
-rw-r--r--src/components/application_manager/include/application_manager/application_manager_impl.h4
-rw-r--r--src/components/application_manager/src/application_manager_impl.cc65
2 files changed, 55 insertions, 14 deletions
diff --git a/src/components/application_manager/include/application_manager/application_manager_impl.h b/src/components/application_manager/include/application_manager/application_manager_impl.h
index c59456a022..192472171d 100644
--- a/src/components/application_manager/include/application_manager/application_manager_impl.h
+++ b/src/components/application_manager/include/application_manager/application_manager_impl.h
@@ -1724,9 +1724,9 @@ class ApplicationManagerImpl
AMTelemetryObserver* metric_observer_;
#endif // TELEMETRY_MONITOR
- Timer application_list_update_timer_;
+ TimerSPtr application_list_update_timer_;
- Timer tts_global_properties_timer_;
+ TimerSPtr tts_global_properties_timer_;
Timer clear_pool_timer_;
diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc
index 7a5d5fc0dc..361cc0d1b3 100644
--- a/src/components/application_manager/src/application_manager_impl.cc
+++ b/src/components/application_manager/src/application_manager_impl.cc
@@ -189,13 +189,20 @@ ApplicationManagerImpl::ApplicationManagerImpl(
, pending_device_map_lock_ptr_(
std::make_shared<sync_primitives::RecursiveLock>())
, application_list_update_timer_(
- "AM ListUpdater",
- new TimerTaskImpl<ApplicationManagerImpl>(
- this, &ApplicationManagerImpl::OnApplicationListUpdateTimer))
+ std::make_shared<timer::Timer,
+ const char*,
+ ::timer::TimerTaskImpl<ApplicationManagerImpl>*>(
+ "AM ListUpdater",
+ new TimerTaskImpl<ApplicationManagerImpl>(
+ this, &ApplicationManagerImpl::OnApplicationListUpdateTimer)))
, tts_global_properties_timer_(
- "AM TTSGLPRTimer",
- new TimerTaskImpl<ApplicationManagerImpl>(
- this, &ApplicationManagerImpl::OnTimerSendTTSGlobalProperties))
+ std::make_shared<timer::Timer,
+ const char*,
+ ::timer::TimerTaskImpl<ApplicationManagerImpl>*>(
+ "AM TTSGLPRTimer",
+ new TimerTaskImpl<ApplicationManagerImpl>(
+ this,
+ &ApplicationManagerImpl::OnTimerSendTTSGlobalProperties)))
, clear_pool_timer_("ClearPoolTimer",
new TimerTaskImpl<ApplicationManagerImpl>(
this, &ApplicationManagerImpl::ClearTimerPool))
@@ -577,7 +584,18 @@ ApplicationSharedPtr ApplicationManagerImpl::RegisterApplication(
SDL_LOG_DEBUG("Restarting application list update timer");
GetPolicyHandler().OnAppsSearchStarted();
uint32_t timeout = get_settings().application_list_update_timeout();
- application_list_update_timer_.Start(timeout, timer::kSingleShot);
+ if (application_list_update_timer_->is_running() ||
+ application_list_update_timer_->is_completed()) {
+ application_list_update_timer_->Stop();
+ }
+ application_list_update_timer_ =
+ std::make_shared<timer::Timer,
+ const char*,
+ ::timer::TimerTaskImpl<ApplicationManagerImpl>*>(
+ "AM ListUpdater",
+ new TimerTaskImpl<ApplicationManagerImpl>(
+ this, &ApplicationManagerImpl::OnApplicationListUpdateTimer));
+ application_list_update_timer_->Start(timeout, timer::kSingleShot);
if (!is_all_apps_allowed_) {
SDL_LOG_WARN("RegisterApplication: access to app's disabled by user");
@@ -1677,7 +1695,18 @@ void ApplicationManagerImpl::OnFindNewApplicationsRequest() {
connection_handler().ConnectToAllDevices();
SDL_LOG_DEBUG("Starting application list update timer");
uint32_t timeout = get_settings().application_list_update_timeout();
- application_list_update_timer_.Start(timeout, timer::kSingleShot);
+ if (application_list_update_timer_->is_running() ||
+ application_list_update_timer_->is_completed()) {
+ application_list_update_timer_->Stop();
+ }
+ application_list_update_timer_ =
+ std::make_shared<timer::Timer,
+ const char*,
+ ::timer::TimerTaskImpl<ApplicationManagerImpl>*>(
+ "AM ListUpdater",
+ new TimerTaskImpl<ApplicationManagerImpl>(
+ this, &ApplicationManagerImpl::OnApplicationListUpdateTimer));
+ application_list_update_timer_->Start(timeout, timer::kSingleShot);
GetPolicyHandler().OnAppsSearchStarted();
}
@@ -2650,7 +2679,7 @@ bool ApplicationManagerImpl::Init(
bool ApplicationManagerImpl::Stop() {
SDL_LOG_AUTO_TRACE();
InitiateStopping();
- application_list_update_timer_.Stop();
+ application_list_update_timer_->Stop();
try {
if (unregister_reason_ ==
mobile_api::AppInterfaceUnregisteredReason::INVALID_ENUM) {
@@ -4318,7 +4347,19 @@ void ApplicationManagerImpl::AddAppToTTSGlobalPropertiesList(
SDL_LOG_INFO("Start tts_global_properties_timer_");
tts_global_properties_app_list_lock_.Release();
const uint32_t timeout_ms = 1000;
- tts_global_properties_timer_.Start(timeout_ms, timer::kSingleShot);
+ if (tts_global_properties_timer_->is_running() ||
+ tts_global_properties_timer_->is_completed()) {
+ tts_global_properties_timer_->Stop();
+ }
+ tts_global_properties_timer_ =
+ std::make_shared<timer::Timer,
+ const char*,
+ ::timer::TimerTaskImpl<ApplicationManagerImpl>*>(
+ "AM TTSGLPRTimer",
+ new TimerTaskImpl<ApplicationManagerImpl>(
+ this,
+ &ApplicationManagerImpl::OnTimerSendTTSGlobalProperties));
+ tts_global_properties_timer_->Start(timeout_ms, timer::kSingleShot);
return;
}
tts_global_properties_app_list_lock_.Release();
@@ -4337,7 +4378,7 @@ void ApplicationManagerImpl::RemoveAppFromTTSGlobalPropertiesList(
SDL_LOG_DEBUG("Stop tts_global_properties_timer_");
// if container is empty need to stop timer
tts_global_properties_app_list_lock_.Release();
- tts_global_properties_timer_.Stop();
+ tts_global_properties_timer_->Stop();
return;
}
}
@@ -4774,7 +4815,7 @@ void ApplicationManagerImpl::AddAppToRegisteredAppList(
SDL_LOG_DEBUG("App with app_id: "
<< application->app_id()
<< " has been added to registered applications list");
- if (application_list_update_timer_.is_running() &&
+ if (application_list_update_timer_->is_running() &&
!registered_during_timer_execution_) {
GetPolicyHandler().OnAddedNewApplicationToAppList(
application->app_id(), application->policy_app_id());