void wait(Lock& lock) { BOOST_ASIO_ASSERT(lock.locked()); unique_lock_adapter u_lock(lock); while (!signalled_) cond_.wait(u_lock.unique_lock_); }
bool wait_for_usec(Lock& lock, long usec) { BOOST_ASIO_ASSERT(lock.locked()); unique_lock_adapter u_lock(lock); if (!signalled_) cond_.wait_for(u_lock.unique_lock_, std::chrono::microseconds(usec)); return signalled_; }
void wait(Lock& lock) { BOOST_ASIO_ASSERT(lock.locked()); unique_lock_adapter u_lock(lock); while ((state_ & 1) == 0) { waiter w(state_); cond_.wait(u_lock.unique_lock_); } }
void espeak_callback(const std_msgs::String::ConstPtr& line) { // lock mutex before calling espeak functions boost::mutex::scoped_lock u_lock(mtx); /* Speak the string */ ROS_INFO("%s", line->data.c_str()); espeak_Synth(line->data.c_str(), line->data.length()+1, 0, POS_CHARACTER, 0, espeakCHARS_AUTO | espeakPHONEMES | espeakENDPAUSE, NULL, NULL); espeak_Synchronize(); //ROS_INFO("Speaking: \"%s\"", line->data.c_str()); }
bool wait_for_usec(Lock& lock, long usec) { BOOST_ASIO_ASSERT(lock.locked()); unique_lock_adapter u_lock(lock); if ((state_ & 1) == 0) { waiter w(state_); cond_.wait_for(u_lock.unique_lock_, std::chrono::microseconds(usec)); } return (state_ & 1) != 0; }
void dyn_cfg_callback(espeak_ros::EspeakConfig &cfg, uint32_t level) { // lock mutex before calling espeak functions boost::mutex::scoped_lock u_lock(mtx); std::string voice, dialect; voice = getVoiceName(cfg.voice); dialect = getDialectName(cfg.dialect); espeak_VOICE voice_select; std::memset(&voice_select,0,sizeof(voice_select)); voice_select.name = voice.c_str(); voice_select.languages = dialect.c_str(); voice_select.age = cfg.age; // 0=not specified, or age in years voice_select.gender = cfg.gender; // 0=none, 1=male, 2=female if (espeak_SetVoiceByProperties(&voice_select) != EE_OK) { ROS_ERROR("Could not set espeak voice properties. Aborting."); return; } ROS_INFO("Using voice %s", voice.c_str()); ROS_INFO("Using dialect %s", dialect.c_str()); if (espeak_SetParameter(espeakRATE, cfg.rate, 0) != EE_OK) { ROS_ERROR("Could not set espeak rate. Aborting."); return; } if (espeak_SetParameter(espeakVOLUME, cfg.volume, 0) != EE_OK) { ROS_ERROR("Could not set espeak volume. Aborting."); return; } if (espeak_SetParameter(espeakPITCH, cfg.pitch, 0) != EE_OK) { ROS_ERROR("Could not set espeak pitch. Aborting."); return; } if (espeak_SetParameter(espeakRANGE, cfg.range, 0) != EE_OK) { ROS_ERROR("Could not set espeak range. Aborting."); return; } if (espeak_SetParameter(espeakPUNCTUATION, espeak_PUNCT_TYPE(cfg.punctuation), 0) != EE_OK) { ROS_ERROR("Could not set espeak punctuation. Aborting."); return; } if (espeak_SetParameter(espeakCAPITALS, cfg.capitals, 0) != EE_OK) { ROS_ERROR("Could not set espeak capitals. Aborting."); return; } int wordgap = cfg.wordgap % 10; if (espeak_SetParameter(espeakWORDGAP, wordgap, 0) != EE_OK) { ROS_ERROR("Could not set espeak wordgap. Aborting."); return; } }
threadpool::TaskType threadpool::getTask() { { /// Wait For WakeUp std::unique_lock<std::mutex> u_lock( m_mutex_wait ); m_cond.wait(u_lock , [&]()->bool { return !(m_running && m_task.empty()) ; }); } std::lock_guard<std::mutex> lock( m_mutex ); TaskType task; if ( !m_task.empty() ) { task = m_task.front(); m_task.pop(); } return task; }
/** * Check for duplicate Message ID * @param op operation * @return status */ static int wsman_is_duplicate_message_id(op_t * op) { WsXmlNodeH header = wsman_get_soap_header_element(op->in_doc, NULL, NULL); int retVal = 0; SoapH soap; WsXmlNodeH msgIdNode; soap = op->dispatch->soap; msgIdNode = ws_xml_get_child(header, 0, XML_NS_ADDRESSING, WSA_MESSAGE_ID); if (msgIdNode != NULL) { lnode_t *node; char *msgId; msgId = ws_xml_get_node_text(msgIdNode); if (msgId[0] == 0 ) { generate_op_fault(op, WSA_INVALID_MESSAGE_INFORMATION_HEADER, 0 ); debug("MessageId missing"); return 1; } debug("Checking Message ID: %s", msgId); u_lock(soap); if (soap->processedMsgIdList == NULL) { soap->processedMsgIdList = list_create(LISTCOUNT_T_MAX); } #ifndef IGNORE_DUPLICATE_ID node = list_first(soap->processedMsgIdList); while (node != NULL) { if (!strcmp(msgId, (char *) node->list_data)) { debug("Duplicate Message ID: %s", msgId); retVal = 1; generate_op_fault(op, WSA_INVALID_MESSAGE_INFORMATION_HEADER, WSA_DETAIL_DUPLICATE_MESSAGE_ID); break; } node = list_next(soap->processedMsgIdList, node); } #endif if (!retVal) { while (list_count(soap->processedMsgIdList) >= PROCESSED_MSG_ID_MAX_SIZE) { node = list_del_first(soap->processedMsgIdList); u_free(node->list_data); u_free(node); } node = lnode_create(NULL); if (node) { node->list_data = u_str_clone(msgId); if (node->list_data == NULL) { u_free(node); } else { list_append(soap->processedMsgIdList, node); } } } u_unlock(soap); } else if (!wsman_is_identify_request(op->in_doc)) { generate_op_fault(op, WSA_MESSAGE_INFORMATION_HEADER_REQUIRED, 0); debug("No MessageId Header found"); return 1; } return retVal; }