diff --git a/include/TSentry.h b/include/TSentry.h index 125aa75..e6e2537 100644 --- a/include/TSentry.h +++ b/include/TSentry.h @@ -24,6 +24,7 @@ public: void AddErrorBreadcrumb(const std::string& msg, const std::string& file, const std::string& line); // cleared when Logged void SetTransaction(const std::string& id); + [[nodiscard]] std::unique_lock CreateExclusiveContext(); private: bool mValid { true }; diff --git a/src/THeartbeatThread.cpp b/src/THeartbeatThread.cpp index 1fe8479..1212ec1 100644 --- a/src/THeartbeatThread.cpp +++ b/src/THeartbeatThread.cpp @@ -48,6 +48,7 @@ void THeartbeatThread::operator()() { debug("server returned \"" + T + "\""); if (T.size() > std::string("YOU_SHALL_NOT_PASS").size() && Application::Settings.Key.size() == 36) { + auto Lock = Sentry.CreateExclusiveContext(); Sentry.AddExtra("response-body", T); Sentry.AddExtra("request-body", Body); Sentry.SetTransaction(Application::GetBackendHostname() + Target); diff --git a/src/TNetwork.cpp b/src/TNetwork.cpp index 0f90663..e91d3d9 100644 --- a/src/TNetwork.cpp +++ b/src/TNetwork.cpp @@ -297,6 +297,7 @@ void TNetwork::Authentication(SOCKET TCPSock) { if (!AuthResponse.IsObject() && Rc != "0") { ClientKick(*Client, "Backend returned invalid auth response format."); error("Backend returned invalid auth response format. This should never happen."); + auto Lock = Sentry.CreateExclusiveContext(); Sentry.AddExtra("response-body", Rc); Sentry.AddExtra("key", RequestString); Sentry.SetTransaction(Application::GetBackendUrlForAuth() + Target); diff --git a/src/TSentry.cpp b/src/TSentry.cpp index 75b3bd3..984df10 100644 --- a/src/TSentry.cpp +++ b/src/TSentry.cpp @@ -47,7 +47,7 @@ void TSentry::Log(sentry_level_t level, const std::string& logger, const std::st void TSentry::LogDebug(const std::string& text, const std::string& file, const std::string& line) { SetTransaction(file + ":" + line); - Log(SENTRY_LEVEL_DEBUG, "default", file + ": " + text); + Log(SENTRY_LEVEL_DEBUG, "default", file + ": " + text); } void TSentry::AddExtra(const std::string& key, const sentry_value_t& value) { @@ -86,3 +86,7 @@ void TSentry::SetTransaction(const std::string& id) { } sentry_set_transaction(id.c_str()); } + +std::unique_lock TSentry::CreateExclusiveContext() { + return std::unique_lock(mMutex); +} diff --git a/src/TServer.cpp b/src/TServer.cpp index d2106f6..259edff 100644 --- a/src/TServer.cpp +++ b/src/TServer.cpp @@ -323,6 +323,7 @@ void TServer::Apply(TClient& c, int VID, const std::string& pckt) { std::string VD = c.GetCarData(VID); if (VD.empty()) { error("Tried to apply change to vehicle that does not exist"); + auto Lock = Sentry.CreateExclusiveContext(); Sentry.AddExtra("packet", Packet); Sentry.AddExtra("vehicle-id", std::to_string(VID)); Sentry.AddExtra("client-car-count", std::to_string(c.GetCarCount()));