fix crash which could happen when closing an invalid socket

for some reason boost::asio doesn't account for this and lets us simply
die when/if this happens.
This commit is contained in:
Lion Kortlepel
2022-11-14 23:37:54 +01:00
parent 35b38f35bb
commit eaab5eaf30
2 changed files with 7 additions and 0 deletions

View File

@@ -127,6 +127,7 @@ private:
std::string mDID;
int mID = -1;
std::chrono::time_point<TimeType> mLastPingTime;
std::mutex mDisconnectMtx;
};
// Returns a valid client, or nullptr if no such client exists

View File

@@ -59,7 +59,13 @@ std::string TClient::GetCarPositionRaw(int Ident) {
}
void TClient::Disconnect(std::string_view Reason) {
// we need exclusivity here in case we can't
std::unique_lock Lock(mDisconnectMtx);
beammp_debugf("Disconnecting client {} for reason: {}", GetID(), Reason);
if (mSocket.is_open()) {
beammp_debug("Somehow Disconnect() was called twice, ignoring");
return;
}
boost::system::error_code ec;
mSocket.shutdown(socket_base::shutdown_both, ec);
if (ec) {