From 142b38baca73d5c0bf5e11f6f7789e60cf7da041 Mon Sep 17 00:00:00 2001 From: Colin Dellow Date: Mon, 23 Sep 2024 04:36:22 -0400 Subject: [PATCH] thread-safety fixes: PooledString, layer metadata (#761) --- src/osm_lua_processing.cpp | 3 +++ src/pooled_string.cpp | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/osm_lua_processing.cpp b/src/osm_lua_processing.cpp index 545b1f37..76201ebd 100644 --- a/src/osm_lua_processing.cpp +++ b/src/osm_lua_processing.cpp @@ -17,6 +17,8 @@ const std::string EMPTY_STRING = ""; thread_local kaguya::State *g_luaState = nullptr; thread_local OsmLuaProcessing* osmLuaProcessing = nullptr; +std::mutex vectorLayerMetadataMutex; + void handleOsmLuaProcessingUserSignal(int signum) { osmLuaProcessing->handleUserSignal(signum); } @@ -913,6 +915,7 @@ std::string OsmLuaProcessing::FindInRelation(const std::string &key) { // Record attribute name/type for vector_layers table void OsmLuaProcessing::setVectorLayerMetadata(const uint_least8_t layer, const string &key, const uint type) { + std::lock_guard lock(vectorLayerMetadataMutex); layers.layers[layer].attributeMap[key] = type; } diff --git a/src/pooled_string.cpp b/src/pooled_string.cpp index a7aea1cf..393e9f9b 100644 --- a/src/pooled_string.cpp +++ b/src/pooled_string.cpp @@ -2,9 +2,10 @@ #include #include #include +#include namespace PooledStringNS { - std::vector tables; + std::deque tables; std::mutex mutex; const uint8_t ShortString = 0b00;