16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-22 22:09:19 +02:00

Add security locks for material manager

thanks to @Milek7 for advice about material manager
This commit is contained in:
2025-02-28 10:54:59 +01:00
parent 1dc7d50851
commit 8b3baa84fe
2 changed files with 53 additions and 45 deletions

View File

@@ -18,6 +18,7 @@ http://mozilla.org/MPL/2.0/.
#include "motiontelemetry.h" #include "motiontelemetry.h"
#include "ref/discord-rpc/include/discord_rpc.h" #include "ref/discord-rpc/include/discord_rpc.h"
#include <map> #include <map>
#include <thread>
#ifdef WITH_UART #ifdef WITH_UART
#include "uart.h" #include "uart.h"
@@ -35,6 +36,7 @@ struct global_settings {
/// Mapa z watkami w formacie <std::string nazwa, std::thread watek> /// Mapa z watkami w formacie <std::string nazwa, std::thread watek>
/// </summary> /// </summary>
std::map<std::string, std::thread> threads = {}; std::map<std::string, std::thread> threads = {};
std::thread::id mainThreadId = std::this_thread::get_id();
bool shiftState{ false }; //m7todo: brzydko bool shiftState{ false }; //m7todo: brzydko
bool ctrlState{ false }; bool ctrlState{ false };
bool altState{ false }; bool altState{ false };

View File

@@ -29,6 +29,8 @@ Copyright (C) 2001-2004 Marcin Wozniak, Maciej Czapkiewicz and others
using namespace Mtable; using namespace Mtable;
std::mutex materialLoadLock;
float TSubModel::fSquareDist = 0.f; float TSubModel::fSquareDist = 0.f;
std::uintptr_t TSubModel::iInstance; // numer renderowanego egzemplarza obiektu std::uintptr_t TSubModel::iInstance; // numer renderowanego egzemplarza obiektu
texture_handle const *TSubModel::ReplacableSkinId = NULL; texture_handle const *TSubModel::ReplacableSkinId = NULL;
@@ -377,6 +379,8 @@ std::pair<int, int> TSubModel::Load( cParser &parser, bool dynamic )
if (!parser.expectToken("map:")) if (!parser.expectToken("map:"))
Error("Model map parse failure!"); Error("Model map parse failure!");
materialLoadLock.lock();
std::string material = parser.getToken<std::string>(); std::string material = parser.getToken<std::string>();
std::replace(material.begin(), material.end(), '\\', '/'); std::replace(material.begin(), material.end(), '\\', '/');
if (material == "none") if (material == "none")
@@ -423,6 +427,8 @@ std::pair<int, int> TSubModel::Load( cParser &parser, bool dynamic )
// 1. Opacity=0 (przejściowo <1, czy tam <100) // 1. Opacity=0 (przejściowo <1, czy tam <100)
iFlags |= Opacity < 0.999f ? 0x20 : 0x10 ; // 0x20-przezroczysta, 0x10-nieprzezroczysta iFlags |= Opacity < 0.999f ? 0x20 : 0x10 ; // 0x20-przezroczysta, 0x10-nieprzezroczysta
}; };
materialLoadLock.unlock();
} }
else if (eType == TP_STARS) else if (eType == TP_STARS)
{ {