Skip to content

Commit

Permalink
- fixed FDynArray_Obj not performing write barriers properly.
Browse files Browse the repository at this point in the history
  • Loading branch information
Doom2fan authored and coelckers committed Sep 16, 2022
1 parent 7ce364b commit 12995b8
Showing 1 changed file with 22 additions and 8 deletions.
30 changes: 22 additions & 8 deletions src/common/scripting/core/dynarrays.cpp
Expand Up @@ -842,30 +842,45 @@ DEFINE_ACTION_FUNCTION_NATIVE(FDynArray_Ptr, Clear, ArrayClear<FDynArray_Ptr>)
//
//-----------------------------------------------------

DEFINE_ACTION_FUNCTION_NATIVE(FDynArray_Obj, Copy, ArrayCopy<FDynArray_Obj>)
void ObjArrayCopy(FDynArray_Obj *self, FDynArray_Obj *other)
{
PARAM_SELF_STRUCT_PROLOGUE(FDynArray_Obj);
PARAM_POINTER(other, FDynArray_Obj);
for (auto& elem : *other) GC::WriteBarrier(elem);
*self = *other;
return 0;
}

DEFINE_ACTION_FUNCTION_NATIVE(FDynArray_Obj, Move, ArrayMove<FDynArray_Obj>)
DEFINE_ACTION_FUNCTION_NATIVE(FDynArray_Obj, Copy, ObjArrayCopy)
{
PARAM_SELF_STRUCT_PROLOGUE(FDynArray_Obj);
PARAM_POINTER(other, FDynArray_Obj);
ObjArrayCopy(self, other);
return 0;
}

void ObjArrayMove(FDynArray_Obj *self, FDynArray_Obj *other)
{
for (auto& elem : *other) GC::WriteBarrier(elem);
*self = std::move(*other);
return 0;
}

DEFINE_ACTION_FUNCTION_NATIVE(FDynArray_Obj, Append, ArrayAppend<FDynArray_Obj>)
DEFINE_ACTION_FUNCTION_NATIVE(FDynArray_Obj, Move, ObjArrayMove)
{
PARAM_SELF_STRUCT_PROLOGUE(FDynArray_Obj);
PARAM_POINTER(other, FDynArray_Obj);
ObjArrayMove(self, other);
return 0;
}

void ObjArrayAppend(FDynArray_Obj *self, FDynArray_Obj *other)
{
for (auto& elem : *other) GC::WriteBarrier(elem);
self->Append(*other);
}

DEFINE_ACTION_FUNCTION_NATIVE(FDynArray_Obj, Append, ObjArrayAppend)
{
PARAM_SELF_STRUCT_PROLOGUE(FDynArray_Obj);
PARAM_POINTER(other, FDynArray_Obj);
ObjArrayAppend(self, other);
return 0;
}

Expand All @@ -886,7 +901,6 @@ DEFINE_ACTION_FUNCTION_NATIVE(FDynArray_Obj, Push, ObjArrayPush)
{
PARAM_SELF_STRUCT_PROLOGUE(FDynArray_Obj);
PARAM_OBJECT(val, DObject);
GC::WriteBarrier(val);
ACTION_RETURN_INT(ObjArrayPush(self, val));
}

Expand Down

0 comments on commit 12995b8

Please sign in to comment.