bool console_signal_service_base::system_service::deliver_signal() { bool handled = false; lock_guard services_guard(subscribers_mutex_); for (console_signal_service_base* subscriber = subscribers_.front(); subscriber; subscriber = subscribers_.next(*subscriber)) { handled |= subscriber->deliver_signal(); } return handled; }
bool ControllerManager::listControllersSrv( controller_manager_msgs::ListControllers::Request &req, controller_manager_msgs::ListControllers::Response &resp) { // pretend to use the request (void) req; // lock services ROS_DEBUG("list controller service called"); boost::mutex::scoped_lock services_guard(services_lock_); ROS_DEBUG("list controller service locked"); // lock controllers to get all names/types/states boost::recursive_mutex::scoped_lock controller_guard(controllers_lock_); std::vector<ControllerSpec> &controllers = controllers_lists_[current_controllers_list_]; resp.controller.resize(controllers.size()); for (size_t i = 0; i < controllers.size(); ++i) { controller_manager_msgs::ControllerState& cs = resp.controller[i]; cs.name = controllers[i].info.name; cs.type = controllers[i].info.type; cs.hardware_interface = controllers[i].info.hardware_interface; cs.resources.clear(); cs.resources.reserve(controllers[i].info.resources.size()); for (std::set<std::string>::iterator it = controllers[i].info.resources.begin(); it != controllers[i].info.resources.end(); it++) cs.resources.push_back(*it); if (controllers[i].c->isRunning()) cs.state = "running"; else cs.state = "stopped"; } ROS_DEBUG("list controller service finished"); return true; }
void console_signal_service_base::system_service::remove_subscriber( console_signal_service_base& subscriber) { lock_guard services_guard(subscribers_mutex_); subscribers_.erase(subscriber); }
void console_signal_service_base::system_service::add_subscriber( console_signal_service_base& subscriber) { lock_guard services_guard(subscribers_mutex_); subscribers_.push_back(subscriber); }