diff options
author | Sho Amano <samano@xevo.com> | 2018-06-28 14:14:59 +0900 |
---|---|---|
committer | Sho Amano <samano@xevo.com> | 2018-06-28 17:36:33 +0900 |
commit | 09fab4fe47c5b06384dcfd5147186c4507ded320 (patch) | |
tree | ccaeeb82c60ebe806e82ff1c5ae253228beaceb6 | |
parent | 1b949923cff8ee3a9386608a76a04c1a9bbe21cb (diff) | |
download | sdl_core-09fab4fe47c5b06384dcfd5147186c4507ded320.tar.gz |
Update NonConstDataAccessor to align with PR #2254
Like DataAccessor, NonConstDataAccessor uses a shared pointer
of a Lock instance.
6 files changed, 38 insertions, 29 deletions
diff --git a/src/components/connection_handler/include/connection_handler/connection_handler_impl.h b/src/components/connection_handler/include/connection_handler/connection_handler_impl.h index e43722aa6a..ae1790ab79 100644 --- a/src/components/connection_handler/include/connection_handler/connection_handler_impl.h +++ b/src/components/connection_handler/include/connection_handler/connection_handler_impl.h @@ -624,7 +624,8 @@ class ConnectionHandlerImpl * @brief session/connection map */ SessionConnectionMap session_connection_map_; - mutable sync_primitives::Lock session_connection_map_lock_; + mutable std::shared_ptr<sync_primitives::Lock> + session_connection_map_lock_ptr_; /** * \brief List of connections diff --git a/src/components/connection_handler/src/connection_handler_impl.cc b/src/components/connection_handler/src/connection_handler_impl.cc index 8af0d85edf..89f79e7ccf 100644 --- a/src/components/connection_handler/src/connection_handler_impl.cc +++ b/src/components/connection_handler/src/connection_handler_impl.cc @@ -68,7 +68,8 @@ ConnectionHandlerImpl::ConnectionHandlerImpl( , connection_handler_observer_(NULL) , transport_manager_(tm) , protocol_handler_(NULL) - , session_connection_map_lock_(true) + , session_connection_map_lock_ptr_( + std::make_shared<sync_primitives::Lock>(true)) , connection_list_lock_() , connection_handler_observer_lock_() , connection_list_deleter_(&connection_list_) @@ -1002,7 +1003,7 @@ DevicesDiscoveryStarter& ConnectionHandlerImpl::get_device_discovery_starter() { NonConstDataAccessor<SessionConnectionMap> ConnectionHandlerImpl::session_connection_map() { return NonConstDataAccessor<SessionConnectionMap>( - session_connection_map_, session_connection_map_lock_); + session_connection_map_, session_connection_map_lock_ptr_); } SessionTransports ConnectionHandlerImpl::SetSecondaryTransportID( @@ -1050,7 +1051,7 @@ SessionTransports ConnectionHandlerImpl::SetSecondaryTransportID( const SessionTransports ConnectionHandlerImpl::GetSessionTransports( uint8_t session_id) const { SessionTransports st; - sync_primitives::AutoLock auto_lock(session_connection_map_lock_); + sync_primitives::AutoLock auto_lock(session_connection_map_lock_ptr_); SessionConnectionMap::const_iterator it = session_connection_map_.find(session_id); if (session_connection_map_.end() == it) { @@ -1065,7 +1066,7 @@ const SessionTransports ConnectionHandlerImpl::GetSessionTransports( const uint8_t ConnectionHandlerImpl::GetSessionIdFromSecondaryTransport( transport_manager::ConnectionUID secondary_transport_id) const { - sync_primitives::AutoLock auto_lock(session_connection_map_lock_); + sync_primitives::AutoLock auto_lock(session_connection_map_lock_ptr_); SessionConnectionMap::const_iterator it = session_connection_map_.begin(); for (; session_connection_map_.end() != it; it++) { SessionTransports st = it->second; diff --git a/src/components/connection_handler/test/connection_test.cc b/src/components/connection_handler/test/connection_test.cc index fb70c2b3c1..e3c513f5ac 100644 --- a/src/components/connection_handler/test/connection_test.cc +++ b/src/components/connection_handler/test/connection_test.cc @@ -452,10 +452,11 @@ TEST_F(ConnectionTest, AddNewSession_VerifySessionConnectionMapAdded) { connection_handle, device_handle, &mock_connection_handler, heart_beat); SessionConnectionMap session_connection_map; - sync_primitives::Lock session_connection_map_lock; + std::shared_ptr<sync_primitives::Lock> session_connection_map_lock_ptr = + std::make_shared<sync_primitives::Lock>(); EXPECT_CALL(mock_connection_handler, session_connection_map()) .WillRepeatedly(Return(NonConstDataAccessor<SessionConnectionMap>( - session_connection_map, session_connection_map_lock))); + session_connection_map, session_connection_map_lock_ptr))); transport_manager::ConnectionUID connection_handle_uid = 1; uint32_t sid = connection->AddNewSession(connection_handle_uid); @@ -482,7 +483,8 @@ TEST_F(ConnectionTest, RemoveSession_VerifySessionConnectionMapRemoved) { connection_handle, device_handle, &mock_connection_handler, heart_beat); SessionConnectionMap session_connection_map; - sync_primitives::Lock session_connection_map_lock; + std::shared_ptr<sync_primitives::Lock> session_connection_map_lock_ptr = + std::make_shared<sync_primitives::Lock>(); // input some dummy data SessionTransports st1 = {1234, 0}; SessionTransports st2 = {2345, 0}; @@ -491,7 +493,7 @@ TEST_F(ConnectionTest, RemoveSession_VerifySessionConnectionMapRemoved) { EXPECT_CALL(mock_connection_handler, session_connection_map()) .WillRepeatedly(Return(NonConstDataAccessor<SessionConnectionMap>( - session_connection_map, session_connection_map_lock))); + session_connection_map, session_connection_map_lock_ptr))); transport_manager::ConnectionUID connection_handle_uid = 1; uint32_t sid = connection->AddNewSession(connection_handle_uid); diff --git a/src/components/connection_handler/test/heart_beat_monitor_test.cc b/src/components/connection_handler/test/heart_beat_monitor_test.cc index 826006d534..4065a0e537 100644 --- a/src/components/connection_handler/test/heart_beat_monitor_test.cc +++ b/src/components/connection_handler/test/heart_beat_monitor_test.cc @@ -55,7 +55,10 @@ using ::testing::Return; class HeartBeatMonitorTest : public testing::Test { public: - HeartBeatMonitorTest() : conn(NULL) { + HeartBeatMonitorTest() + : conn(NULL) + , session_connection_map_lock_ptr_( + std::make_shared<sync_primitives::Lock>()) { kTimeout = 5000u; } @@ -67,7 +70,7 @@ class HeartBeatMonitorTest : public testing::Test { 0xABCDEF; static const transport_manager::ConnectionUID kDefaultConnectionHandle = 1; connection_handler::SessionConnectionMap session_connection_map_; - ::sync_primitives::Lock session_connection_map_lock_; + std::shared_ptr<sync_primitives::Lock> session_connection_map_lock_ptr_; virtual void SetUp() { conn = new connection_handler::Connection( @@ -87,7 +90,7 @@ TEST_F(HeartBeatMonitorTest, TimerNotStarted) { ON_CALL(connection_handler_mock, session_connection_map()) .WillByDefault( Return(NonConstDataAccessor<connection_handler::SessionConnectionMap>( - session_connection_map_, session_connection_map_lock_))); + session_connection_map_, session_connection_map_lock_ptr_))); // Whithout StartHeartBeat nothing to be call EXPECT_CALL(connection_handler_mock, CloseSession(_, _)).Times(0); @@ -101,7 +104,7 @@ TEST_F(HeartBeatMonitorTest, TimerNotElapsed) { ON_CALL(connection_handler_mock, session_connection_map()) .WillByDefault( Return(NonConstDataAccessor<connection_handler::SessionConnectionMap>( - session_connection_map_, session_connection_map_lock_))); + session_connection_map_, session_connection_map_lock_ptr_))); EXPECT_CALL(connection_handler_mock, SendHeartBeat(_, _)).Times(0); EXPECT_CALL(connection_handler_mock, CloseSession(_, _)).Times(0); @@ -115,7 +118,7 @@ TEST_F(HeartBeatMonitorTest, TimerElapsed) { ON_CALL(connection_handler_mock, session_connection_map()) .WillByDefault( Return(NonConstDataAccessor<connection_handler::SessionConnectionMap>( - session_connection_map_, session_connection_map_lock_))); + session_connection_map_, session_connection_map_lock_ptr_))); const uint32_t session = conn->AddNewSession(kDefaultConnectionHandle); @@ -143,7 +146,7 @@ TEST_F(HeartBeatMonitorTest, KeptAlive) { ON_CALL(connection_handler_mock, session_connection_map()) .WillByDefault( Return(NonConstDataAccessor<connection_handler::SessionConnectionMap>( - session_connection_map_, session_connection_map_lock_))); + session_connection_map_, session_connection_map_lock_ptr_))); EXPECT_CALL(connection_handler_mock, CloseSession(_, _)).Times(0); EXPECT_CALL(connection_handler_mock, CloseConnection(_)).Times(0); @@ -164,7 +167,7 @@ TEST_F(HeartBeatMonitorTest, NotKeptAlive) { ON_CALL(connection_handler_mock, session_connection_map()) .WillByDefault( Return(NonConstDataAccessor<connection_handler::SessionConnectionMap>( - session_connection_map_, session_connection_map_lock_))); + session_connection_map_, session_connection_map_lock_ptr_))); const uint32_t session = conn->AddNewSession(kDefaultConnectionHandle); @@ -199,7 +202,7 @@ TEST_F(HeartBeatMonitorTest, TwoSessionsElapsed) { ON_CALL(connection_handler_mock, session_connection_map()) .WillByDefault( Return(NonConstDataAccessor<connection_handler::SessionConnectionMap>( - session_connection_map_, session_connection_map_lock_))); + session_connection_map_, session_connection_map_lock_ptr_))); const uint32_t kSession1 = conn->AddNewSession(kDefaultConnectionHandle); @@ -238,7 +241,7 @@ TEST_F(HeartBeatMonitorTest, IncreaseHeartBeatTimeout) { ON_CALL(connection_handler_mock, session_connection_map()) .WillByDefault( Return(NonConstDataAccessor<connection_handler::SessionConnectionMap>( - session_connection_map_, session_connection_map_lock_))); + session_connection_map_, session_connection_map_lock_ptr_))); const uint32_t kSession = conn->AddNewSession(kDefaultConnectionHandle); @@ -255,7 +258,7 @@ TEST_F(HeartBeatMonitorTest, DecreaseHeartBeatTimeout) { ON_CALL(connection_handler_mock, session_connection_map()) .WillByDefault( Return(NonConstDataAccessor<connection_handler::SessionConnectionMap>( - session_connection_map_, session_connection_map_lock_))); + session_connection_map_, session_connection_map_lock_ptr_))); const uint32_t kSession = conn->AddNewSession(kDefaultConnectionHandle); diff --git a/src/components/include/utils/data_accessor.h b/src/components/include/utils/data_accessor.h index 5b267096c6..28e9f9b6c4 100644 --- a/src/components/include/utils/data_accessor.h +++ b/src/components/include/utils/data_accessor.h @@ -74,11 +74,10 @@ class DataAccessor { template <class T> class NonConstDataAccessor { public: - NonConstDataAccessor(T& data, const sync_primitives::Lock& lock) - : data_(data) - , lock_(const_cast<sync_primitives::Lock&>(lock)) - , counter_(new uint32_t(0)) { - lock_.Acquire(); + NonConstDataAccessor(T& data, + const std::shared_ptr<sync_primitives::Lock>& lock) + : data_(data), lock_(lock), counter_(new uint32_t(0)) { + lock_->Acquire(); } NonConstDataAccessor(const NonConstDataAccessor<T>& other) @@ -88,7 +87,7 @@ class NonConstDataAccessor { ~NonConstDataAccessor() { if (0 == *counter_) { - lock_.Release(); + lock_->Release(); } else { --(*counter_); } @@ -100,7 +99,7 @@ class NonConstDataAccessor { private: void* operator new(size_t size); T& data_; - sync_primitives::Lock& lock_; + const std::shared_ptr<sync_primitives::Lock> lock_; utils::SharedPtr<uint32_t> counter_; }; diff --git a/src/components/protocol_handler/test/protocol_handler_tm_test.cc b/src/components/protocol_handler/test/protocol_handler_tm_test.cc index 634512a2d2..f840a3f258 100644 --- a/src/components/protocol_handler/test/protocol_handler_tm_test.cc +++ b/src/components/protocol_handler/test/protocol_handler_tm_test.cc @@ -206,6 +206,9 @@ class ProtocolHandlerImplTest : public ::testing::Test { . // Return false to avoid call KeepConnectionAlive WillRepeatedly(Return(false)); + + session_connection_map_lock_ptr_ = + std::make_shared<sync_primitives::Lock>(); } void TearDown() OVERRIDE { @@ -393,7 +396,7 @@ class ProtocolHandlerImplTest : public ::testing::Test { // Used by OnTransportConfigUpdated() tests. The lifetime of these objects // should be longer than that of a test case. connection_handler::SessionConnectionMap session_connection_map_; - sync_primitives::Lock session_connection_map_lock_; + std::shared_ptr<sync_primitives::Lock> session_connection_map_lock_ptr_; }; #ifdef ENABLE_SECURITY @@ -2418,7 +2421,7 @@ TEST_F(ProtocolHandlerImplTest, EXPECT_CALL(connection_handler_mock, session_connection_map()) .WillOnce(Return(NonConstDataAccessor<SessionConnectionMap>( - session_connection_map_, session_connection_map_lock_))); + session_connection_map_, session_connection_map_lock_ptr_))); EXPECT_CALL(session_observer_mock, ProtocolVersionUsed(_, _, _)) .WillRepeatedly( @@ -2489,7 +2492,7 @@ TEST_F(ProtocolHandlerImplTest, EXPECT_CALL(connection_handler_mock, session_connection_map()) .WillOnce(Return(NonConstDataAccessor<SessionConnectionMap>( - session_connection_map_, session_connection_map_lock_))); + session_connection_map_, session_connection_map_lock_ptr_))); EXPECT_CALL(session_observer_mock, ProtocolVersionUsed(_, _, _)) .WillRepeatedly( |