diff --git a/src/cpp/rtps/builtin/discovery/participant/PDP.cpp b/src/cpp/rtps/builtin/discovery/participant/PDP.cpp index b51ea8b0e42..621912a2111 100644 --- a/src/cpp/rtps/builtin/discovery/participant/PDP.cpp +++ b/src/cpp/rtps/builtin/discovery/participant/PDP.cpp @@ -1017,7 +1017,7 @@ CDRMessage_t PDP::get_participant_proxy_data_serialized(Endianness_t endian) void PDP::check_remote_participant_liveliness( ParticipantProxyData* remote_participant) { - std::lock_guard guard(*this->mp_mutex); + std::unique_lock guard(*this->mp_mutex); if(GUID_t::unknown() != remote_participant->m_guid) { @@ -1028,6 +1028,7 @@ void PDP::check_remote_participant_liveliness( std::chrono::microseconds(TimeConv::Duration_t2MicroSecondsInt64(remote_participant->m_leaseDuration)); if (now > real_lease_tm) { + guard.unlock(); remove_remote_participant(remote_participant->m_guid, ParticipantDiscoveryInfo::DROPPED_PARTICIPANT); return; }