Fixes the deadlock in keep alive

Signed-off-by: Tao He <sighingnow@gmail.com>
This commit is contained in:
Tao He 2023-02-14 21:01:39 +08:00
parent 81d446e55c
commit 32b18f9022
2 changed files with 3 additions and 3 deletions

View File

@ -62,7 +62,7 @@ namespace etcdv3
LeaseKeepAliveRequest req;
bool isCancelled;
std::mutex protect_is_cancelled;
std::recursive_mutex protect_is_cancelled;
friend class etcd::KeepAlive;
};

View File

@ -97,7 +97,7 @@ etcdv3::AsyncLeaseKeepAliveResponse etcdv3::AsyncLeaseKeepAliveAction::ParseResp
etcd::Response etcdv3::AsyncLeaseKeepAliveAction::Refresh()
{
std::lock_guard<std::mutex> scope_lock(this->protect_is_cancelled);
std::lock_guard<std::recursive_mutex> scope_lock(this->protect_is_cancelled);
auto start_timepoint = std::chrono::high_resolution_clock::now();
if (isCancelled) {
@ -171,7 +171,7 @@ etcd::Response etcdv3::AsyncLeaseKeepAliveAction::Refresh()
void etcdv3::AsyncLeaseKeepAliveAction::CancelKeepAlive()
{
std::lock_guard<std::mutex> scope_lock(this->protect_is_cancelled);
std::lock_guard<std::recursive_mutex> scope_lock(this->protect_is_cancelled);
if(isCancelled == false)
{
isCancelled = true;