找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 5947|回复: 3

ACE_Svc_Handler 调用putq问题(急)

[复制链接]
发表于 2008-8-25 11:40:13 | 显示全部楼层 |阅读模式
操作系统:redhat linux 9.0
ACE包:ACE5.5
我写的服务器程序使用了ACE_Acceptor,ACE_Svc_Handler,ACE_Reactor的组合通信框架。
当客户端程序发送第一个数据包到服务器的时候,服务器处理接收到的数据包后将回应给客户端的数据组包后在ACE_Svc_Handler派生类中调用this->putq(...)函数投递数据并注册写事件。数据成功地发送给客户端后,客户端接着给服务器发送第二个包。服务器处理第二个数据包的流程和处理第一个包的流程一样,然而,当再次调用this->putq(...)函数的时候,该函数并没有返回,似乎进入了死锁的状态。
奇怪的是同样的ACE5.5包和服务器程序代码放在debian下编译后却不会出现这样的情况。我猜想在redhat linux9.0下编译是不是有什么编译宏需要定义,而我没有给出定义。导致出现上述问题。请高手指点!谢谢!

[ 本帖最后由 lsxsoftr 于 2008-8-25 11:42 编辑 ]
发表于 2008-8-25 14:13:58 | 显示全部楼层
看代码。
putq阻塞是有处理逻辑的,你能否跟着进去,看看阻塞到什么地方了。
 楼主| 发表于 2008-8-25 17:57:09 | 显示全部楼层
谢谢winston的回复!我也不太清楚,只是猜想是有关锁出了问题。后来我把模版参数改为ACE_NULL_MUTEX就没有问题了。能正常使用。我的代码被重构过,所以起初的设计框架和思想改变了,以至于后来出现这样的问题。原来是自己做应用数据缓存,多线程间共享一个消息队列所以用ACE_MT_MUTEX进行初始化模版。由于处理不好,所以后来就把它取消了。呵呵,我也不知道准确的原因,应该是这个ACE_MT_MUTEX参数误用了吧。反正现在是正常了。但是还有个问题我使用了ACE_SSL_SOCK_ACCEPTOR ,ACE_SSL_SOCK_STREAM,分别去实例化ACE_Acceptor,ACE_Svc_Handler。也就是使用了ACE封装好的OPENSSL。在ACE_Svc_Handle被调用handle_close的时候要怎么处理呢?也就是,需不需要调用SSL相关释放资源的函数呢?如果不调用,我发现内存是总在增长。所以,请问大家谁知道怎么处理呢?谢谢!
发表于 2008-8-26 09:47:03 | 显示全部楼层
应该是锁应用的问题了。
SSL的那个我也没用过。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-23 17:29 , Processed in 0.017202 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表