From f7c0cfc5d3a42916a4650ea3e27f2f670fb682fb Mon Sep 17 00:00:00 2001 From: XieHan Date: Fri, 29 Oct 2021 19:00:48 +0800 Subject: [PATCH] move 'pre_delete_server' inside wrlock --- src/nameservice/WFServiceGovernance.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/nameservice/WFServiceGovernance.cc b/src/nameservice/WFServiceGovernance.cc index a4e2f0aa..6446fea9 100644 --- a/src/nameservice/WFServiceGovernance.cc +++ b/src/nameservice/WFServiceGovernance.cc @@ -245,13 +245,13 @@ void WFServiceGovernance::success(RouteManager::RouteResult *result, pthread_rwlock_wrlock(&this->rwlock); this->recover_server_from_breaker(server); - pthread_rwlock_unlock(&this->rwlock); if (--server->ref == 0) { this->pre_delete_server(server); delete server; } + pthread_rwlock_unlock(&this->rwlock); this->WFNSPolicy::success(result, tracing, target); } @@ -271,13 +271,14 @@ void WFServiceGovernance::failed(RouteManager::RouteResult *result, pthread_rwlock_wrlock(&this->rwlock); if (++server->fail_count == server->params->max_fails) this->fuse_server_to_breaker(server); - pthread_rwlock_unlock(&this->rwlock); + if (--server->ref == 0) { this->pre_delete_server(server); delete server; } + pthread_rwlock_unlock(&this->rwlock); this->WFNSPolicy::failed(result, tracing, target); }