Sentry: use locked contexts to send data to avoid races

This commit is contained in:
Lion Kortlepel 2021-08-10 12:28:06 +02:00 committed by Lion
parent 51e662fdda
commit 1409d4ef80
5 changed files with 9 additions and 1 deletions

View File

@ -24,6 +24,7 @@ public:
void AddErrorBreadcrumb(const std::string& msg, const std::string& file, const std::string& line); void AddErrorBreadcrumb(const std::string& msg, const std::string& file, const std::string& line);
// cleared when Logged // cleared when Logged
void SetTransaction(const std::string& id); void SetTransaction(const std::string& id);
[[nodiscard]] std::unique_lock<std::mutex> CreateExclusiveContext();
private: private:
bool mValid { true }; bool mValid { true };

View File

@ -48,6 +48,7 @@ void THeartbeatThread::operator()() {
debug("server returned \"" + T + "\""); debug("server returned \"" + T + "\"");
if (T.size() > std::string("YOU_SHALL_NOT_PASS").size() if (T.size() > std::string("YOU_SHALL_NOT_PASS").size()
&& Application::Settings.Key.size() == 36) { && Application::Settings.Key.size() == 36) {
auto Lock = Sentry.CreateExclusiveContext();
Sentry.AddExtra("response-body", T); Sentry.AddExtra("response-body", T);
Sentry.AddExtra("request-body", Body); Sentry.AddExtra("request-body", Body);
Sentry.SetTransaction(Application::GetBackendHostname() + Target); Sentry.SetTransaction(Application::GetBackendHostname() + Target);

View File

@ -297,6 +297,7 @@ void TNetwork::Authentication(SOCKET TCPSock) {
if (!AuthResponse.IsObject() && Rc != "0") { if (!AuthResponse.IsObject() && Rc != "0") {
ClientKick(*Client, "Backend returned invalid auth response format."); ClientKick(*Client, "Backend returned invalid auth response format.");
error("Backend returned invalid auth response format. This should never happen."); error("Backend returned invalid auth response format. This should never happen.");
auto Lock = Sentry.CreateExclusiveContext();
Sentry.AddExtra("response-body", Rc); Sentry.AddExtra("response-body", Rc);
Sentry.AddExtra("key", RequestString); Sentry.AddExtra("key", RequestString);
Sentry.SetTransaction(Application::GetBackendUrlForAuth() + Target); Sentry.SetTransaction(Application::GetBackendUrlForAuth() + Target);

View File

@ -86,3 +86,7 @@ void TSentry::SetTransaction(const std::string& id) {
} }
sentry_set_transaction(id.c_str()); sentry_set_transaction(id.c_str());
} }
std::unique_lock<std::mutex> TSentry::CreateExclusiveContext() {
return std::unique_lock<std::mutex>(mMutex);
}

View File

@ -323,6 +323,7 @@ void TServer::Apply(TClient& c, int VID, const std::string& pckt) {
std::string VD = c.GetCarData(VID); std::string VD = c.GetCarData(VID);
if (VD.empty()) { if (VD.empty()) {
error("Tried to apply change to vehicle that does not exist"); error("Tried to apply change to vehicle that does not exist");
auto Lock = Sentry.CreateExclusiveContext();
Sentry.AddExtra("packet", Packet); Sentry.AddExtra("packet", Packet);
Sentry.AddExtra("vehicle-id", std::to_string(VID)); Sentry.AddExtra("vehicle-id", std::to_string(VID));
Sentry.AddExtra("client-car-count", std::to_string(c.GetCarCount())); Sentry.AddExtra("client-car-count", std::to_string(c.GetCarCount()));