ACE5.5
现象:
一个正常的TCP连接,一段时间后client向server发送数据失败——127.0.0.1的地址,连接未断开,client日志显示发送成功,而server的日志却显示未收到数据。
内部实现:
client发送数据时首先将数据加入ACE_Message_Queue<ACE_MT_SYNCH>中,再使用reactor()->notify(this, ACE_Event_Handler::WRITE_MASK)进行发送(该过程正常执行);在发送线程ACE_Task_Base的svc()中循环调用reactor()->handle_events()处理事件,在handle_output中调用send_n进行发送;程序没有调用reactor()->register_handler注册ACE_Event_Handler::WRITE_MASK事件。
跟踪: 发现没有回调handle_output()——是因为使用notify方式不能保证该函数被回调吗?
尝试加入ACE_Event_Handler::WRITE_MASK注册。
犯错了!线程被堵了。
本次问题在ASR时发生,以前发生过一次“是”在TTS时,青年人网站提示现象完全一样——现在才发现其实上次的原因也是因为ASR造成的线程阻塞,难怪上次一直压TTS问题也没重现。
责任编辑:小草