@@ -303,6 +303,7 @@ void kernel::add_service(
303303 owner.c_str (), name.c_str (), service_definition.c_str ());
304304 return ;
305305 }
306+ log (warning, " debug: add_service %s.%s\n " , owner.c_str (), name.c_str ());
306307
307308 log (verbose, " adding service owner \" %s\" , name \" %s\" , service_definition:\n %s\n " ,
308309 owner.c_str (), name.c_str (), service_definition.c_str ());
@@ -329,6 +330,8 @@ void kernel::remove_service(const std::string& owner, const std::string& name) {
329330 if ((it = service_map.find (std::make_pair (owner, name))) == service_map.end ())
330331 return ; // service not found
331332
333+ log (warning, " debug: remove_service %s.%s\n " , owner.c_str (), name.c_str ());
334+
332335 for (const auto & kv : bridge_map)
333336 kv.second ->remove_service (*(it->second ));
334337
@@ -519,6 +522,7 @@ const std::string kernel::get_pd_definition(const std::string&name) {
519522void kernel::remove_pd_definition (const std::string& name) {
520523 bool used = false ;
521524
525+ std::unique_lock<std::recursive_mutex> lock (device_map_mtx);
522526 for (const auto & dev : device_map) {
523527 auto pddev = dynamic_pointer_cast<process_data>(dev.second );
524528 if (pddev) {
@@ -1062,6 +1066,7 @@ void kernel::add_device_listener(sp_device_listener_t dl) {
10621066
10631067 dl_map[key] = dl;
10641068
1069+ std::unique_lock<std::recursive_mutex> lock (device_map_mtx);
10651070 for (const auto & kv : device_map)
10661071 dl->notify_add_device (kv.second );
10671072}
@@ -1076,6 +1081,7 @@ void kernel::remove_device_listener(sp_device_listener_t dl) {
10761081 return ;
10771082 }
10781083
1084+ std::unique_lock<std::recursive_mutex> lock (device_map_mtx);
10791085 for (const auto & kv : device_map)
10801086 dl_map[key]->notify_remove_device (kv.second );
10811087
@@ -1086,6 +1092,7 @@ void kernel::remove_device_listener(sp_device_listener_t dl) {
10861092// add a named device
10871093void kernel::add_device (sp_device_t req) {
10881094 auto map_index = req->id ();
1095+ std::unique_lock<std::recursive_mutex> lock (device_map_mtx);
10891096 if (device_map.find (map_index) != device_map.end ()) {
10901097 log (warning, " duplicate regiser of device \" %s\" , ignoring new device!\n " , map_index.c_str ());
10911098 return ; // already in
@@ -1122,6 +1129,7 @@ void kernel::remove_device(sp_device_t req) {
11221129 for (const auto & kv : dl_map)
11231130 kv.second ->notify_remove_device (req);
11241131
1132+ std::unique_lock<std::recursive_mutex> lock (device_map_mtx);
11251133 auto it = device_map.find (map_index);
11261134 if (it == device_map.end ())
11271135 return ; // no device with name found
@@ -1132,6 +1140,7 @@ void kernel::remove_device(sp_device_t req) {
11321140
11331141// remove all devices from owner
11341142void kernel::remove_devices (const std::string& owner) {
1143+ std::unique_lock<std::recursive_mutex> lock (device_map_mtx);
11351144 for (auto it = device_map.begin (); it != device_map.end (); ) {
11361145 if (it->second ->owner == owner) {
11371146 log (verbose, " removing device %s\n " , it->second ->id ().c_str ());
@@ -1334,6 +1343,7 @@ void kernel::svc_list_devices(
13341343 const struct services ::robotkernel::kernel::svc_req_list_devices& req,
13351344 struct services ::robotkernel::kernel::svc_resp_list_devices& resp)
13361345{
1346+ std::unique_lock<std::recursive_mutex> lock (device_map_mtx);
13371347 for (const auto & kv : device_map) {
13381348 resp.devices .push_back (kv.first );
13391349 }
@@ -1350,6 +1360,7 @@ void kernel::svc_process_data_info(
13501360{
13511361 resp.error_message = " " ;
13521362
1363+ std::unique_lock<std::recursive_mutex> lock (device_map_mtx);
13531364 if (device_map.find (req.name ) != device_map.end ()) {
13541365 const auto & pd = std::dynamic_pointer_cast<process_data>(device_map[req.name ]);
13551366
@@ -1384,6 +1395,7 @@ void kernel::svc_trigger_info(
13841395 resp.rate = 0 .;
13851396 resp.error_message = " " ;
13861397
1398+ std::unique_lock<std::recursive_mutex> lock (device_map_mtx);
13871399 if (device_map.find (req.name ) != device_map.end ()) {
13881400 const auto & dev = std::dynamic_pointer_cast<trigger>(device_map[req.name ]);
13891401
@@ -1411,6 +1423,7 @@ void kernel::svc_stream_info(
14111423 resp.owner = " " ;
14121424 resp.error_message = " " ;
14131425
1426+ std::unique_lock<std::recursive_mutex> lock (device_map_mtx);
14141427 if (device_map.find (req.name ) != device_map.end ()) {
14151428 const auto & dev = std::dynamic_pointer_cast<stream>(device_map[req.name ]);
14161429
@@ -1437,6 +1450,7 @@ void kernel::svc_service_interface_info(
14371450 resp.owner = " " ;
14381451 resp.error_message = " " ;
14391452
1453+ std::unique_lock<std::recursive_mutex> lock (device_map_mtx);
14401454 if (device_map.find (req.name ) != device_map.end ()) {
14411455 const auto & dev = std::dynamic_pointer_cast<service_interface>(device_map[req.name ]);
14421456
@@ -1516,6 +1530,7 @@ void kernel::svc_list_pd_injections(
15161530{
15171531 resp.error_message = " " ;
15181532
1533+ std::unique_lock<std::recursive_mutex> lock (device_map_mtx);
15191534 for (const auto & kv : device_map) {
15201535 std::shared_ptr<pd_injection_base> retval =
15211536 std::dynamic_pointer_cast<pd_injection_base>(kv.second );
0 commit comments