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); }