sewenew / redis-plus-plus

Redis client written in C++
Apache License 2.0
1.64k stars 351 forks source link

[QUESTION]在connection_pool中进行重连时,似乎没有更新pool,这不会有问题吗? #567

Closed feihongmeilian closed 5 months ago

feihongmeilian commented 5 months ago

微信图片_20240605135609 connection_pool或async_connection_pool中,需要重连时,我注意到在重连前就解锁了,同时重连建立成功后,直接交换了智能指针,这是否会有问题?

最开始我以为重连需要更新pool,所以解锁早了,应该在更新完pool后再解锁; 后来我注意到重连只是把连接好的connection返回了,并没有更新pool,这样是否会导致pool中失效的连接没有被更新?是否应该在加大加锁范围,同时交换改为std::swap(tmp_connection, connection);?

或者在其他地方有对pool的更新,而我没发现的?

谢谢!

sewenew commented 5 months ago

不会有问题,connection是从pool中fetch出来的一个局部变量(已经不在pool中了),tmp_connection也是一个局部变量,所以这里的swap是线程安全的。

后来我注意到重连只是把连接好的connection返回了,并没有更新pool,这样是否会导致pool中失效的连接没有被更新?或者在其他地方有对pool的更新,而我没发现的?

connection已经从pool取出了,后续用完之后,会通过release接口把connection还回到pool中去

Regards

feihongmeilian commented 5 months ago

非常感谢作者的回答!我看了是在Guarde的时候设置回去了。