qicosmos / rest_rpc

modern C++(C++11), simple, easy to use rpc framework
MIT License
1.66k stars 365 forks source link

rpc_client 中call_back函数(rcp_client.hpp 638行)的assert(f)被触发的原因是什么 #137

Open sdoa5335717 opened 3 months ago

sdoa5335717 commented 3 months ago

我在使用客户端的过程中assert(f)被触发了,导致程序退出,应用场景如下 1, 客户端有一个不断向服务端发送数据的功能,可以理解为自定义心跳。 2, 当自定义心跳超时的时候,客户端主动关闭连接,然后调用connect再进行重连。 3, 问题就出现在当自定义心跳超时后,assert(f)有时候就会被触发,程序就退出了。

我理解的是因为close的调用,导致future_map_被清空了,auto &f = futuremap[req_id]的f为空。这里的assert(f)能否改成if(f) {f->set_value()}?

qicosmos commented 3 months ago

这个问题应该fix 过了,你用master 代码测一下吧。