urenai 发表于 2023-4-10 15:02:06

严重性5星的bug。不知道你们有没有发现。

火山hp client组件。很奇怪。
在接收事件阻塞(未处理完前),如果触发了客户离开事件,离开事件不受接收事件约束。任会执行。

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

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

wangvoldp 发表于 2023-4-10 18:00:37

那有没有一种可能 他俩不是在一个线程中运行的

创世魂 发表于 2023-4-10 18:32:27

你能想到的,hp作者应该也能想到。。所以应该不算bug吧。估计处理过了。

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

urenai 发表于 2023-4-10 18:53:44

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

hp内部应该是有线程池的,每一个sock都应具备独立的临界许可。至少 server组件时这样的

urenai 发表于 2023-4-10 18:57:20

创世魂 发表于 2023-4-10 18:32
你能想到的,hp作者应该也能想到。。所以应该不算bug吧。估计处理过了。

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

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

但我觉得没必要这样区分////

urenai 发表于 2023-4-10 19:03:20

现在的情况是,即使你得到了客户 断开连接 事件,你也不能直接释放 附加指针。必须确保 recv不在访问。

我的解决方案是:手动给client组件 创建个临界类,
数据进入临界开始 临界结束
客户离开临界开始 临界结束
虽然说,非必要不使用临界区,但问题是你必须得让离开事件受到接收事件的约束。

quary888 发表于 2023-4-11 12:57:23

HP用了两年多了从来没有出过问题所以不负责任的说人家肯定处理过了

urenai 发表于 2023-4-11 14:17:08

quary888 发表于 2023-4-11 12:57
HP用了两年多了从来没有出过问题所以不负责任的说人家肯定处理过了

实践是检验真理的唯一标准。
你的使用方法可能不同而已。
页: [1]
查看完整版本: 严重性5星的bug。不知道你们有没有发现。