碰上一个ACE问题

2008-11-4

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问题也没重现。

看看错误的传递路径:
ASR语法错误 -> “过快”的错误处理 -> 底层设备状态错误 -> 底层API调用阻塞 -> 线程阻塞 -> 通信失败 -> TTS不可用

——够烂吧?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值