Skip to content

Commit f275d58

Browse files
committed
added safety lockguards and cleanups
1 parent c78e2b4 commit f275d58

File tree

10 files changed

+60
-7
lines changed

10 files changed

+60
-7
lines changed

src/devices/networkWrappers/localization2D_nws_yarp/Localization2D_nws_yarp.cpp

+13-4
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ Localization2D_nws_yarp::Localization2D_nws_yarp() : PeriodicThread(DEFAULT_THRE
4848

4949
bool Localization2D_nws_yarp::attach(PolyDriver* driver)
5050
{
51+
std::lock_guard<std::mutex> lock(m_mutex);
52+
5153
if (driver->isValid())
5254
{
5355
driver->view(iLoc);
@@ -83,15 +85,17 @@ bool Localization2D_nws_yarp::attach(PolyDriver* driver)
8385
return false;
8486
}
8587

86-
PeriodicThread::setPeriod(m_GENERAL_period);
87-
return PeriodicThread::start();
88+
this->setPeriod(m_GENERAL_period);
89+
return this->start();
8890
}
8991

9092
bool Localization2D_nws_yarp::detach()
9193
{
92-
if (PeriodicThread::isRunning())
94+
std::lock_guard<std::mutex> lock(m_mutex);
95+
96+
if (this->isRunning())
9397
{
94-
PeriodicThread::stop();
98+
this->stop();
9599
}
96100
m_rpcPort.interrupt();
97101
m_rpcPort.close();
@@ -186,8 +190,11 @@ bool Localization2D_nws_yarp::close()
186190

187191
bool Localization2D_nws_yarp::read(yarp::os::ConnectionReader& connection)
188192
{
193+
if (!connection.isValid()) { return false;}
189194
if (!m_RPC) { return false;}
190195

196+
std::lock_guard<std::mutex> lock(m_mutex);
197+
191198
bool b = m_RPC->read(connection);
192199
if (b)
193200
{
@@ -202,6 +209,8 @@ bool Localization2D_nws_yarp::read(yarp::os::ConnectionReader& connection)
202209

203210
void Localization2D_nws_yarp::run()
204211
{
212+
std::lock_guard<std::mutex> lock(m_mutex);
213+
205214
double m_stats_time_curr = yarp::os::Time::now();
206215
if (m_stats_time_curr - m_stats_time_last > 5.0)
207216
{

src/devices/networkWrappers/localization2D_nws_yarp/Localization2D_nws_yarp.h

+1
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ class Localization2D_nws_yarp :
5757
//drivers and interfaces
5858
yarp::dev::PolyDriver pLoc;
5959
yarp::dev::Nav2D::ILocalization2D* iLoc = nullptr;
60+
std::mutex m_mutex;
6061

6162
double m_stats_time_last;
6263
bool m_getdata_using_periodic_thread=true;

src/devices/networkWrappers/map2D_nws_yarp/Map2D_nws_yarp.cpp

+10-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@ Map2D_nws_yarp::~Map2D_nws_yarp() = default;
4242

4343
bool Map2D_nws_yarp::read(yarp::os::ConnectionReader& connection)
4444
{
45-
if (!m_RPC) {return false;}
45+
if (!connection.isValid()) { return false;}
46+
if (!m_RPC) { return false;}
47+
48+
std::lock_guard<std::mutex> lock (m_mutex);
4649

4750
bool b = m_RPC->read(connection);
4851
if (b)
@@ -77,11 +80,15 @@ bool Map2D_nws_yarp::close()
7780
m_rpcPort.interrupt();
7881
m_rpcPort.close();
7982

83+
detach();
84+
8085
return true;
8186
}
8287

8388
bool Map2D_nws_yarp::detach()
8489
{
90+
std::lock_guard lock (m_mutex);
91+
8592
m_iMap2D = nullptr;
8693

8794
if (m_RPC)
@@ -95,6 +102,8 @@ bool Map2D_nws_yarp::detach()
95102

96103
bool Map2D_nws_yarp::attach(PolyDriver* driver)
97104
{
105+
std::lock_guard lock(m_mutex);
106+
98107
if (driver->isValid())
99108
{
100109
driver->view(m_iMap2D);

src/devices/networkWrappers/mobileBaseVelocityControl_nws_yarp/MobileBaseVelocityControl_nws_yarp.cpp

+10-1
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,15 @@ bool MobileBaseVelocityControl_nws_yarp::close()
7979
{
8080
m_rpc_port_navigation_server.close();
8181
m_StreamingInput.close();
82+
83+
detach();
8284
return true;
8385
}
8486

8587
bool MobileBaseVelocityControl_nws_yarp::detach()
8688
{
89+
std::lock_guard lock (m_mutex);
90+
8791
m_iNavVel = nullptr;
8892

8993
if (m_RPC)
@@ -97,6 +101,8 @@ bool MobileBaseVelocityControl_nws_yarp::detach()
97101

98102
bool MobileBaseVelocityControl_nws_yarp::attach(PolyDriver* driver)
99103
{
104+
std::lock_guard lock (m_mutex);
105+
100106
if (driver->isValid())
101107
{
102108
driver->view(m_iNavVel);
@@ -117,7 +123,10 @@ bool MobileBaseVelocityControl_nws_yarp::attach(PolyDriver* driver)
117123

118124
bool MobileBaseVelocityControl_nws_yarp::read(yarp::os::ConnectionReader& connection)
119125
{
120-
if (!m_RPC) { return false; }
126+
if (!connection.isValid()) { return false;}
127+
if (!m_RPC) { return false;}
128+
129+
std::lock_guard<std::mutex> lock(m_mutex);
121130

122131
bool b = m_RPC->read(connection);
123132
if (b)

src/devices/networkWrappers/navigation2D_nws_yarp/Navigation2D_nws_yarp.cpp

+10-1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ Navigation2D_nws_yarp::Navigation2D_nws_yarp() : PeriodicThread(DEFAULT_THREAD_P
3333

3434
bool Navigation2D_nws_yarp::attach(PolyDriver* driver)
3535
{
36+
std::lock_guard lock (m_mutex);
37+
3638
if (driver->isValid())
3739
{
3840
driver->view(iNav_target);
@@ -60,6 +62,8 @@ bool Navigation2D_nws_yarp::attach(PolyDriver* driver)
6062

6163
bool Navigation2D_nws_yarp::detach()
6264
{
65+
std::lock_guard lock (m_mutex);
66+
6367
if (PeriodicThread::isRunning())
6468
{
6569
PeriodicThread::stop();
@@ -127,7 +131,10 @@ bool Navigation2D_nws_yarp::close()
127131

128132
bool Navigation2D_nws_yarp::read(yarp::os::ConnectionReader& connection)
129133
{
130-
if (!m_RPC) { return false; }
134+
if (!connection.isValid()) { return false;}
135+
if (!m_RPC) { return false;}
136+
137+
std::lock_guard<std::mutex> lock(m_mutex);
131138

132139
bool b = m_RPC->read(connection);
133140
if (b)
@@ -143,6 +150,8 @@ bool Navigation2D_nws_yarp::read(yarp::os::ConnectionReader& connection)
143150

144151
void Navigation2D_nws_yarp::run()
145152
{
153+
std::lock_guard lock(m_mutex);
154+
146155
bool ok = iNav_ctrl->getNavigationStatus(m_navigation_status);
147156

148157
double m_stats_time_curr = yarp::os::Time::now();

src/devices/networkWrappers/navigation2D_nws_yarp/Navigation2D_nws_yarp.h

+1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ class Navigation2D_nws_yarp : public yarp::dev::DeviceDriver,
4545
protected:
4646
//thrift
4747
INavigation2DRPCd* m_RPC=nullptr;
48+
std::mutex m_mutex;
4849

4950
yarp::os::Port m_rpcPort;
5051
yarp::os::Port m_statusPort;

src/devices/networkWrappers/odometry2D_nws_yarp/Odometry2D_nws_yarp.cpp

+9
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ Odometry2D_nws_yarp::~Odometry2D_nws_yarp()
2626

2727
bool Odometry2D_nws_yarp::attach(yarp::dev::PolyDriver* driver)
2828
{
29+
std::lock_guard lock(m_mutex);
2930

3031
if (driver->isValid())
3132
{
@@ -48,6 +49,8 @@ bool Odometry2D_nws_yarp::attach(yarp::dev::PolyDriver* driver)
4849

4950
bool Odometry2D_nws_yarp::detach()
5051
{
52+
std::lock_guard lock(m_mutex);
53+
5154
if (PeriodicThread::isRunning())
5255
{
5356
PeriodicThread::stop();
@@ -120,6 +123,8 @@ void Odometry2D_nws_yarp::threadRelease()
120123

121124
void Odometry2D_nws_yarp::run()
122125
{
126+
std::lock_guard lock(m_mutex);
127+
123128
if (m_odometry2D_interface!=nullptr)
124129
{
125130
yarp::dev::OdometryData odometryData;
@@ -190,6 +195,10 @@ bool Odometry2D_nws_yarp::close()
190195

191196
bool Odometry2D_nws_yarp::read(yarp::os::ConnectionReader& connection)
192197
{
198+
if (!connection.isValid()) { return false;}
199+
if (!m_RPC) { return false;}
200+
201+
std::lock_guard<std::mutex> lock(m_mutex);
193202
if (m_RPC)
194203
{
195204
bool b = m_RPC->read(connection);

src/devices/networkWrappers/odometry2D_nws_yarp/Odometry2D_nws_yarp.h

+2
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ class Odometry2D_nws_yarp :
5757
void run() override;
5858

5959
private:
60+
std::mutex m_mutex;
61+
6062
//thrift
6163
IOdometry2DRPCd* m_RPC=nullptr;
6264

src/devices/networkWrappers/speechSynthesizer_nws_yarp/SpeechSynthesizer_nws_yarp.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ bool SpeechSynthesizer_nws_yarp::closeMain()
9999

100100
bool SpeechSynthesizer_nws_yarp::read(yarp::os::ConnectionReader& connection)
101101
{
102+
if (!connection.isValid()) { return false;}
103+
102104
bool b = m_rpc.read(connection);
103105
if (b)
104106
{

src/devices/networkWrappers/speechTranscription_nws_yarp/SpeechTranscription_nws_yarp.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ bool SpeechTranscription_nws_yarp::closeMain()
9999

100100
bool SpeechTranscription_nws_yarp::read(yarp::os::ConnectionReader& connection)
101101
{
102+
if (!connection.isValid()) { return false;}
103+
102104
bool b = m_rpc.read(connection);
103105
if (b)
104106
{

0 commit comments

Comments
 (0)