From dc9f09f6ab7e56a8184060e311c889f60009599a Mon Sep 17 00:00:00 2001 From: Giulio Romualdi Date: Tue, 5 Dec 2023 22:08:06 +0100 Subject: [PATCH] Avoid to call getMetadata if the signal is not connected in YarpRobotLoggerDevice (#774) --- .../src/YarpRobotLoggerDevice.cpp | 39 ++++++++++++------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/devices/YarpRobotLoggerDevice/src/YarpRobotLoggerDevice.cpp b/devices/YarpRobotLoggerDevice/src/YarpRobotLoggerDevice.cpp index 792854d451..9a285c308b 100644 --- a/devices/YarpRobotLoggerDevice/src/YarpRobotLoggerDevice.cpp +++ b/devices/YarpRobotLoggerDevice/src/YarpRobotLoggerDevice.cpp @@ -994,10 +994,33 @@ void YarpRobotLoggerDevice::lookForExogenousSignals() auto connectToExogeneous = [](auto& signals) -> void { for (auto& [name, signal] : signals) { - if (!signal.connected) + std::lock_guard lock(signal.mutex); + if (signal.connected) { - std::lock_guard lock(signal.mutex); - signal.connected = signal.connect(); + continue; + } + + // try to connect to the signal + signal.connected = signal.connect(); + + // if the connection is successful, get the metadata + // this is required only for the vectors collection signal + if constexpr (std::is_same_v< + std::decay_t, + std::decay_t>) + { + if (!signal.connected) + { + continue; + } + + if (!signal.client.getMetadata(signal.metadata)) + { + log()->warn("[YarpRobotLoggerDevice::lookForExogenousSignals] Unable to get " + "the metadata for the signal named: {}. The exogenous signal will " + "not contain the metadata.", + name); + } } } }; @@ -1019,16 +1042,6 @@ void YarpRobotLoggerDevice::lookForExogenousSignals() connectToExogeneous(m_vectorsCollectionSignals); connectToExogeneous(m_vectorSignals); - for (auto& [key, signal] : m_vectorsCollectionSignals) - { - if (signal.metadata.vectors.size() != 0) - { - continue; - } - std::lock_guard lock(signal.mutex); - signal.client.getMetadata(signal.metadata); - } - // release the CPU BipedalLocomotion::clock().yield();