Skip to content

Commit 7d9f232

Browse files
authored
Fix a race condition (#220)
1 parent 9230b61 commit 7d9f232

File tree

1 file changed

+22
-5
lines changed

1 file changed

+22
-5
lines changed

trantor/net/TcpServer.cc

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -145,19 +145,36 @@ void TcpServer::start()
145145
}
146146
void TcpServer::stop()
147147
{
148-
loop_->runInLoop([this]() { acceptorPtr_.reset(); });
149-
for (auto connection : connSet_)
148+
if (loop_->isInLoopThread())
149+
{
150+
acceptorPtr_.reset();
151+
for (auto connection : connSet_)
152+
{
153+
connection->forceClose();
154+
}
155+
}
156+
else
150157
{
151-
connection->forceClose();
158+
std::promise<void> pro;
159+
auto f = pro.get_future();
160+
loop_->queueInLoop([this, &pro]() {
161+
acceptorPtr_.reset();
162+
for (auto connection : connSet_)
163+
{
164+
connection->forceClose();
165+
}
166+
pro.set_value();
167+
});
168+
f.get();
152169
}
153170
loopPoolPtr_.reset();
154171
for (auto &iter : timingWheelMap_)
155172
{
156-
std::promise<int> pro;
173+
std::promise<void> pro;
157174
auto f = pro.get_future();
158175
iter.second->getLoop()->runInLoop([&iter, &pro]() mutable {
159176
iter.second.reset();
160-
pro.set_value(1);
177+
pro.set_value();
161178
});
162179
f.get();
163180
}

0 commit comments

Comments
 (0)