summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Kutsan <AKutsan@luxoft.com>2016-08-16 17:53:02 +0300
committerAlexander Kutsan <AKutsan@luxoft.com>2016-08-17 10:14:00 +0300
commit662dcbbf0e76cbf7ed3d5de45b5a4103082268e4 (patch)
tree62b5611a35fff31fb3d513c7ba2352e92d229502
parent4969513b9860f35182fba41bc1cc07ebb144c637 (diff)
downloadsdl_core-662dcbbf0e76cbf7ed3d5de45b5a4103082268e4.tar.gz
Make HmiInterfacesImpl Thread safe
Related issue : APPLINK-20920
-rw-r--r--src/components/application_manager/include/application_manager/hmi_interfaces_impl.h3
-rw-r--r--src/components/application_manager/src/hmi_interfaces_impl.cc3
2 files changed, 6 insertions, 0 deletions
diff --git a/src/components/application_manager/include/application_manager/hmi_interfaces_impl.h b/src/components/application_manager/include/application_manager/hmi_interfaces_impl.h
index 0f5bd0027e..3e2013738e 100644
--- a/src/components/application_manager/include/application_manager/hmi_interfaces_impl.h
+++ b/src/components/application_manager/include/application_manager/hmi_interfaces_impl.h
@@ -35,6 +35,8 @@
#include <map>
#include "application_manager/hmi_interfaces.h"
#include "utils/macro.h"
+#include "utils/lock.h"
+
namespace application_manager {
class HmiInterfacesImpl : public HmiInterfaces {
@@ -49,6 +51,7 @@ class HmiInterfacesImpl : public HmiInterfaces {
private:
typedef std::map<InterfaceID, InterfaceState> InterfaceStatesMap;
InterfaceStatesMap interfaces_states_;
+ sync_primitives::Lock interfaces_states_lock_;
};
} // namespace application_manager
#endif // SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_HMI_INTERFACES_IMPL_H_
diff --git a/src/components/application_manager/src/hmi_interfaces_impl.cc b/src/components/application_manager/src/hmi_interfaces_impl.cc
index 452ad00386..08f5d3cc93 100644
--- a/src/components/application_manager/src/hmi_interfaces_impl.cc
+++ b/src/components/application_manager/src/hmi_interfaces_impl.cc
@@ -224,6 +224,7 @@ generate_function_to_interface_convert_map() {
}
HmiInterfacesImpl::HmiInterfacesImpl() {
+ sync_primitives::AutoLock autolock(interfaces_states_lock_);
interfaces_states_[HmiInterfaces::HMI_INTERFACE_BasicCommunication] =
HmiInterfaces::STATE_NOT_RESPONSE;
interfaces_states_[HmiInterfaces::HMI_INTERFACE_Buttons] =
@@ -244,6 +245,7 @@ HmiInterfacesImpl::HmiInterfacesImpl() {
HmiInterfaces::InterfaceState HmiInterfacesImpl::GetInterfaceState(
HmiInterfaces::InterfaceID interface) const {
+ sync_primitives::AutoLock autolock(interfaces_states_lock_);
const InterfaceStatesMap::const_iterator it =
interfaces_states_.find(interface);
// all interfaces should be presented in interfaces_states_ map.
@@ -253,6 +255,7 @@ HmiInterfaces::InterfaceState HmiInterfacesImpl::GetInterfaceState(
void HmiInterfacesImpl::SetInterfaceState(HmiInterfaces::InterfaceID interface,
HmiInterfaces::InterfaceState state) {
+ sync_primitives::AutoLock autolock(interfaces_states_lock_);
DCHECK(interfaces_states_.find(interface) != interfaces_states_.end());
interfaces_states_[interface] = state;
}