递归火山软件开发平台

标题: 严重性5星的bug。不知道你们有没有发现。 [打印本页]

作者: urenai    时间: 2023-4-10 15:02
标题: 严重性5星的bug。不知道你们有没有发现。
火山hp client组件。很奇怪。
在接收事件阻塞(未处理完前),如果触发了客户离开事件,离开事件不受接收事件约束。任会执行。

在正常的sock通讯过程中,我们往往会申请一块内存将指针临时存于  附加数据。
如果 离开事件 提前被触发,那么,必然会在离开事件内释放该段内存。
而接收事件任在继续处理,这就必然会导致读写野指针。

如果你不了解这件事,你代码写的再怎么漂亮,报错时,你也摸不着头脑。直拍大腿。直呼不应该啊。
就是不清楚最新版hp组件有没有处理这个问题。

作者: wangvoldp    时间: 2023-4-10 18:00
那有没有一种可能 他俩不是在一个线程中运行的
作者: 创世魂    时间: 2023-4-10 18:32
你能想到的,hp作者应该也能想到。。所以应该不算bug吧。估计处理过了。

当然具体有没有处理过,除非你能看懂hp源码里面是怎么处理的。


作者: urenai    时间: 2023-4-10 18:53
wangvoldp 发表于 2023-4-10 18:00
那有没有一种可能 他俩不是在一个线程中运行的

hp内部应该是有线程池的,每一个sock都应具备独立的临界许可。至少 server组件时这样的
作者: urenai    时间: 2023-4-10 18:57
创世魂 发表于 2023-4-10 18:32
你能想到的,hp作者应该也能想到。。所以应该不算bug吧。估计处理过了。

当然具体有没有处理过,除非你能 ...

我猜测,因为server是一对多,故:需要存在一些指针,所以给每个套接字配备独立临界区。
因为client就是1对1,故:如需存在指针类信息,自信建立变量存储。

但我觉得没必要这样区分////
作者: urenai    时间: 2023-4-10 19:03
现在的情况是,即使你得到了客户 断开连接 事件,你也不能直接释放 附加指针。必须确保 recv不在访问。

我的解决方案是:手动给client组件 创建个临界类,
数据进入  临界开始 临界结束
客户离开  临界开始 临界结束
虽然说,非必要不使用临界区,但问题是你必须得让离开事件受到接收事件的约束。
作者: quary888    时间: 2023-4-11 12:57
HP用了两年多了  从来没有出过问题  所以不负责任的说人家肯定处理过了
作者: urenai    时间: 2023-4-11 14:17
quary888 发表于 2023-4-11 12:57
HP用了两年多了  从来没有出过问题  所以不负责任的说人家肯定处理过了

实践是检验真理的唯一标准。
你的使用方法可能不同而已。




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4