diff --git a/src/cpp/server/server.cc b/src/cpp/server/server.cc
index e69032a657d27f4c200c69bf422ae50f692aac47..872968056523af76f9e3b2e0ddd032a9247da5da 100644
--- a/src/cpp/server/server.cc
+++ b/src/cpp/server/server.cc
@@ -179,12 +179,12 @@ Server::Server(ThreadPoolInterface* thread_pool, bool thread_pool_owned)
       thread_pool_owned_(thread_pool_owned) {}
 
 Server::~Server() {
-  std::unique_lock<std::mutex> lock(mu_);
-  if (started_ && !shutdown_) {
-    lock.unlock();
-    Shutdown();
-  } else {
-    lock.unlock();
+  {
+    std::unique_lock<std::mutex> lock(mu_);
+    if (started_ && !shutdown_) {
+      lock.unlock();
+      Shutdown();
+    }
   }
   grpc_server_destroy(server_);
   if (thread_pool_owned_) {