fix deadlock in GetCarData, SetCarData

This commit is contained in:
Lion Kortlepel
2021-03-31 14:50:49 +02:00
parent a584e25bf3
commit 018246cea5
2 changed files with 16 additions and 11 deletions

View File

@@ -47,24 +47,28 @@ TClient::TVehicleDataLockPair TClient::GetAllCars() {
}
std::string TClient::GetCarData(int Ident) {
std::unique_lock lock(mVehicleDataMutex);
for (auto& v : mVehicleData) {
if (v.ID() == Ident) {
return v.Data();
{ // lock
std::unique_lock lock(mVehicleDataMutex);
for (auto& v : mVehicleData) {
if (v.ID() == Ident) {
return v.Data();
}
}
}
} // unlock
DeleteCar(Ident);
return "";
}
void TClient::SetCarData(int Ident, const std::string& Data) {
std::unique_lock lock(mVehicleDataMutex);
for (auto& v : mVehicleData) {
if (v.ID() == Ident) {
v.SetData(Data);
return;
{ // lock
std::unique_lock lock(mVehicleDataMutex);
for (auto& v : mVehicleData) {
if (v.ID() == Ident) {
v.SetData(Data);
return;
}
}
}
} // unlock
DeleteCar(Ident);
}