1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-02-28 16:39:43 +00:00

Remove static modifier from local variables used to store temporary loading results

They make the code thread unsafe because different threads will use the same
memory to write and read using different instances of the loaded objects.
This commit is contained in:
elsid 2024-03-19 22:14:53 +01:00
parent 7dcd127295
commit 0da8b29a88
No known key found for this signature in database
GPG key ID: 4DE04C198CBA7625
11 changed files with 13 additions and 13 deletions

View file

@ -53,7 +53,7 @@ void ESM4::Container::load(ESM4::Reader& reader)
break;
case ESM4::SUB_CNTO:
{
static InventoryItem inv; // FIXME: use unique_ptr here?
InventoryItem inv; // FIXME: use unique_ptr here?
reader.get(inv);
reader.adjustFormId(inv.item);
mInventory.push_back(inv);

View file

@ -56,7 +56,7 @@ void ESM4::Creature::load(ESM4::Reader& reader)
break;
case ESM4::SUB_CNTO:
{
static InventoryItem inv; // FIXME: use unique_ptr here?
InventoryItem inv; // FIXME: use unique_ptr here?
reader.get(inv);
reader.adjustFormId(inv.item);
mInventory.push_back(inv);

View file

@ -41,7 +41,7 @@ void ESM4::DialogInfo::load(ESM4::Reader& reader)
mEditorId = ESM::RefId(mId).serializeText(); // FIXME: quick workaround to use existing code
static ScriptLocalVariableData localVar;
ScriptLocalVariableData localVar;
bool ignore = false;
while (reader.getSubRecordHeader())

View file

@ -58,7 +58,7 @@ void ESM4::LevelledCreature::load(ESM4::Reader& reader)
break;
case ESM4::SUB_LVLO:
{
static LVLO lvlo;
LVLO lvlo;
if (subHdr.dataSize != 12)
{
if (subHdr.dataSize == 8)

View file

@ -56,7 +56,7 @@ void ESM4::LevelledItem::load(ESM4::Reader& reader)
break;
case ESM4::SUB_LVLO:
{
static LVLO lvlo;
LVLO lvlo;
if (subHdr.dataSize != 12)
{
if (subHdr.dataSize == 8)

View file

@ -59,7 +59,7 @@ void ESM4::LevelledNpc::load(ESM4::Reader& reader)
break;
case ESM4::SUB_LVLO:
{
static LVLO lvlo;
LVLO lvlo;
if (subHdr.dataSize != 12)
{
if (subHdr.dataSize == 8)

View file

@ -59,7 +59,7 @@ void ESM4::Npc::load(ESM4::Reader& reader)
break;
case ESM4::SUB_CNTO:
{
static InventoryItem inv; // FIXME: use unique_ptr here?
InventoryItem inv; // FIXME: use unique_ptr here?
reader.get(inv);
reader.adjustFormId(inv.item);
mInventory.push_back(inv);

View file

@ -103,7 +103,7 @@ void ESM4::AIPackage::load(ESM4::Reader& reader)
break;
}
static CTDA condition;
CTDA condition;
reader.get(condition);
// FIXME: how to "unadjust" if not FormId?
// adjustFormId(condition.param1);

View file

@ -68,7 +68,7 @@ void ESM4::Pathgrid::load(ESM4::Reader& reader)
}
case ESM4::SUB_PGRR:
{
static PGRR link;
PGRR link;
for (std::size_t i = 0; i < std::size_t(mData); ++i) // keep gcc quiet
{
@ -105,7 +105,7 @@ void ESM4::Pathgrid::load(ESM4::Reader& reader)
}
case ESM4::SUB_PGRL:
{
static PGRL objLink;
PGRL objLink;
reader.getFormId(objLink.object);
// object linkedNode
std::size_t numNodes = (subHdr.dataSize - sizeof(int32_t)) / sizeof(int32_t);

View file

@ -59,8 +59,8 @@ void ESM4::Road::load(ESM4::Reader& reader)
}
case ESM4::SUB_PGRR:
{
static PGRR link;
static RDRP linkPt;
PGRR link;
RDRP linkPt;
for (std::size_t i = 0; i < mNodes.size(); ++i)
{

View file

@ -36,7 +36,7 @@ void ESM4::Script::load(ESM4::Reader& reader)
mId = reader.getFormIdFromHeader();
mFlags = reader.hdr().record.flags;
static ScriptLocalVariableData localVar;
ScriptLocalVariableData localVar;
while (reader.getSubRecordHeader())
{