From c6f0bb92a8d11eaf4a2a05fb36db1b146c414376 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Wed, 24 Jun 2020 11:02:39 +0200 Subject: [PATCH] Add mutex during track design cache creation --- src/openrct2/ride/TrackDesignRepository.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/openrct2/ride/TrackDesignRepository.cpp b/src/openrct2/ride/TrackDesignRepository.cpp index ce7cd1cd26..7a82ef976d 100644 --- a/src/openrct2/ride/TrackDesignRepository.cpp +++ b/src/openrct2/ride/TrackDesignRepository.cpp @@ -27,6 +27,7 @@ #include #include +#include #include using namespace OpenRCT2; @@ -53,6 +54,8 @@ std::string GetNameFromTrackPath(const std::string& path) return name; } +static std::mutex _objectLookupMutex; + class TrackDesignFileIndex final : public FileIndex { private: @@ -78,10 +81,15 @@ public: auto td6 = track_design_open(path.c_str()); if (td6 != nullptr) { - auto* rawObject = object_repository_load_object(&td6->vehicle_object); - const auto* rideEntry = static_cast(static_cast(rawObject)->GetLegacyData()); - auto rideType = RCT2RideTypeToOpenRCT2RideType(td6->type, rideEntry); - object_delete(rawObject); + ObjectEntryIndex rideType = RIDE_TYPE_NULL; + { + std::scoped_lock lock(_objectLookupMutex); + auto* rawObject = object_repository_load_object(&td6->vehicle_object); + const auto* rideEntry = static_cast( + static_cast(rawObject)->GetLegacyData()); + rideType = RCT2RideTypeToOpenRCT2RideType(td6->type, rideEntry); + object_delete(rawObject); + } TrackRepositoryItem item; item.Name = GetNameFromTrackPath(path);