@@ -209,20 +209,22 @@ class scriptModule: public yarp::os::RFModule, public yarpActionsPlayer_IDL
209209 yError () << " Duplicate client entry: " << client_name;
210210 return false ;
211211 }
212- m_robotClients[client_name] = new yarp::dev::PolyDriver;
212+ yarp::dev::PolyDriver* pd_client = new yarp::dev::PolyDriver;
213213 yarp::os::Property clientoptions;
214214 clientoptions.put (" device" , " remote_controlboard" );
215215 clientoptions.put (" remote" , remoteControlBoards);
216216 clientoptions.put (" local" , m_name + " /client/" + client_name);
217217 clientoptions.put (" carrier" , " fast_tcp" );
218218
219219 // configure the client
220- bool rob_ok = m_robotClients[client_name] ->open (clientoptions);
220+ bool rob_ok = pd_client ->open (clientoptions);
221221 if (!rob_ok)
222222 {
223223 yError () << " Unable to initialize client: " << client_name;
224+ delete pd_client;
224225 return false ;
225226 }
227+ m_robotClients[client_name] = pd_client;
226228 }
227229 else
228230 {
@@ -267,38 +269,41 @@ class scriptModule: public yarp::os::RFModule, public yarpActionsPlayer_IDL
267269 }
268270
269271 // configure the remapper
270- if (m_robotRemappers[ remapper_name] != nullptr )
272+ if (m_robotRemappers. count ( remapper_name) )
271273 {
272274 yError () << " Duplicate remapper entry: " << remapper_name;
273275 return false ;
274276 }
275- m_robotRemappers[remapper_name] = new yarp::dev::PolyDriver;
277+ yarp::dev::PolyDriver* pd_remapper = new yarp::dev::PolyDriver;
276278 yarp::os::Property rmoptions;
277279 rmoptions.put (" device" , " controlboardremapper" );
278280 yarp::os::Value* jlist = yarp::os::Value::makeList (axes_names.c_str ());
279281 rmoptions.put (" axesNames" ,jlist);
280- bool rob_ok = m_robotRemappers[remapper_name] ->open (rmoptions);
282+ bool rob_ok = pd_remapper ->open (rmoptions);
281283 if (!rob_ok)
282284 {
283285 yError () << " Unable to initialize remapper: " << remapper_name;
286+ delete pd_remapper;
284287 return false ;
285288 }
289+ m_robotRemappers[remapper_name] = pd_remapper;
286290
287291 // attach the remapper to one or more clients
288292 {
289293 yarp::dev::IMultipleWrapper* ww_rem=nullptr ;
290294 m_robotRemappers[remapper_name]->view (ww_rem);
291295 yarp::dev::PolyDriverList pdlist;
292- for (size_t i =0 ; i <clients_name->size (); i ++)
296+ for (size_t j =0 ; j <clients_name->size (); j ++)
293297 {
294- std::string cnn = clients_name->get (i ).toString ();
295- yarp::dev::PolyDriver* ddnwc = m_robotClients[ cnn] ;
296- if (ddnwc == nullptr )
298+ std::string cnn = clients_name->get (j ).toString ();
299+ auto it = m_robotClients. find ( cnn) ;
300+ if (it == m_robotClients. end () || it-> second == nullptr )
297301 {
298- yError () << " Configuration error while searching for client" << cnn;
302+ yError () << " Configuration error: client ' " << cnn << " ' not found or is invalid. " ;
299303 return false ;
300304 }
301- std::string boardname = " nwcboard" + std::to_string (i);
305+ yarp::dev::PolyDriver* ddnwc = it->second ;
306+ std::string boardname = " nwcboard" + std::to_string (j);
302307 pdlist.push (ddnwc, boardname.c_str ());
303308 }
304309 bool result_att = ww_rem->attachAll (pdlist);
@@ -311,19 +316,21 @@ class scriptModule: public yarp::os::RFModule, public yarpActionsPlayer_IDL
311316 }
312317
313318 // put the controller in the list
314- if (m_robotControllers[ remapper_name] != nullptr )
319+ if (m_robotControllers. count ( remapper_name) )
315320 {
316321 yError () << " Duplicate controller entry: " << remapper_name;
317322 return false ;
318323 }
319- m_robotControllers[remapper_name] = new robotDriver;
320- rob_ok = m_robotControllers[remapper_name] ->configure (m_robotRemappers[remapper_name]);
321- rob_ok &= m_robotControllers[remapper_name] ->init ();
324+ robotDriver* robDrv = new robotDriver;
325+ rob_ok = robDrv ->configure (m_robotRemappers[remapper_name]);
326+ rob_ok &= robDrv ->init ();
322327 if (!rob_ok)
323328 {
324329 yError () << " Unable to initialize controller: " << remapper_name;
330+ delete robDrv;
325331 return false ;
326332 }
333+ m_robotControllers[remapper_name] = robDrv;
327334 }
328335 else
329336 {
0 commit comments