THRIFT-3753 TServerFramework::stop may fail to interrupt connected clients
Client: C++
Patch: tpcwang <tpc.wang@gmail.com>
This closes #959
diff --git a/lib/cpp/src/thrift/server/TServerFramework.cpp b/lib/cpp/src/thrift/server/TServerFramework.cpp
index c617ad0..ea78bcd 100644
--- a/lib/cpp/src/thrift/server/TServerFramework.cpp
+++ b/lib/cpp/src/thrift/server/TServerFramework.cpp
@@ -214,8 +214,10 @@
}
void TServerFramework::stop() {
- serverTransport_->interrupt();
+ // Order is important because serve() releases serverTransport_ when it is
+ // interrupted, which closes the socket that interruptChildren uses.
serverTransport_->interruptChildren();
+ serverTransport_->interrupt();
}
void TServerFramework::newlyConnectedClient(const boost::shared_ptr<TConnectedClient>& pClient) {