Unverified Commit 11560ecb authored by Eisenhauer, Greg's avatar Eisenhauer, Greg Committed by GitHub
Browse files

Backport recent ASAN fixes to 2.10 release branch (#3985)

* BP5internal - Switch to name based record lookup

* Fix Var reference

* ASAN fixes

* kill comment
parent 5110209d
Loading
Loading
Loading
Loading
+0 −12
Original line number Diff line number Diff line
@@ -14,16 +14,4 @@ set(MEMORYCHECK_SUPPRESSIONS_FILE ${CMAKE_SOURCE_DIR}/scripts/dashboard/nightly/

# Ignore tests that are currently failing, remove tests here as they are fixed
list(APPEND CTEST_CUSTOM_MEMCHECK_IGNORE 
Engine.BP.BPWriteReadAsStreamTestADIOS2.ReaderWriterDefineVariable.BP5.Serial
Remote.BPWriteReadADIOS2stdio.GetRemote
Remote.BPWriteMemorySelectionRead.GetRemote
Remote.BPWriteMemorySelectionRead.FileRemote
remoteServerCleanup
Engine.SST.SstWriteFails.InvalidBeginStep.Serial
Staging.1x1.Local2.CommMin.BP5.SST
Staging.1x1Struct.CommMin.BP5.SST
Staging.WriteMemorySelectionRead.1x1.CommMin.BP5.SST
Staging.1x1.Local2.CommMin.BP.SST
Staging.WriteMemorySelectionRead.1x1.CommMin.BP.SST
Staging.1x1Struct.BP5
)
+3 −1
Original line number Diff line number Diff line
leak:ps_make_timer_name_
leak:ibv_get_device_list
leak:add_transport_to_cm
leak:INT_CMadd_delayed_task
+2 −0
Original line number Diff line number Diff line
@@ -1996,6 +1996,8 @@ BP5Deserializer::~BP5Deserializer()
        free(VarRec.second->VarName);
        if (VarRec.second->Operator)
            free(VarRec.second->Operator);
        if (VarRec.second->Def)
            delete VarRec.second->Def;
        delete VarRec.second;
    }
    if (m_FreeableMBA)
+18 −9
Original line number Diff line number Diff line
@@ -37,14 +37,16 @@ namespace format
BP5Serializer::BP5Serializer() { Init(); }
BP5Serializer::~BP5Serializer()
{
    if (!Info.RecMap.empty())
    if (CurDataBuffer)
        delete CurDataBuffer;
    if (!Info.RecNameMap.empty())
    {
        for (auto &rec : Info.RecMap)
        for (auto &rec : Info.RecNameMap)
        {
            if (rec.second.OperatorType)
                free(rec.second.OperatorType);
        }
        Info.RecMap.clear();
        Info.RecNameMap.clear();
    }
    if (Info.MetaFieldCount)
        free_FMfield_list(Info.MetaFields);
@@ -82,12 +84,13 @@ void BP5Serializer::Init()
    ((BP5MetadataInfoStruct *)MetadataBuf)->BitField = (std::size_t *)malloc(sizeof(size_t));
    ((BP5MetadataInfoStruct *)MetadataBuf)->DataBlockSize = 0;
}
BP5Serializer::BP5WriterRec BP5Serializer::LookupWriterRec(void *Key) const
BP5Serializer::BP5WriterRec BP5Serializer::LookupWriterRec(void *Variable) const
{
    auto it = Info.RecMap.find(Key);
    if (it != Info.RecMap.end())
    core::VariableBase *VB = static_cast<core::VariableBase *>(Variable);
    auto it2 = Info.RecNameMap.find(VB->m_Name);
    if (it2 != Info.RecNameMap.end())
    {
        return const_cast<BP5WriterRec>(&(it->second));
        return const_cast<BP5WriterRec>(&(it2->second));
    }
    return NULL;
}
@@ -467,6 +470,8 @@ void BP5Serializer::AddDoubleArrayField(FMFieldList *FieldP, int *CountP, const
void BP5Serializer::ValidateWriterRec(BP5Serializer::BP5WriterRec Rec, void *Variable)
{
    core::VariableBase *VB = static_cast<core::VariableBase *>(Variable);

    Rec->Key = Variable; // reset this, because Variable might have been destroyed and recreated
    if ((VB->m_Operations.size() == 0) && Rec->OperatorType)
    {
        // removed operator case
@@ -505,7 +510,7 @@ BP5Serializer::BP5WriterRec BP5Serializer::CreateWriterRec(void *Variable, const
#ifdef ADIOS2_HAVE_DERIVED_VARIABLE
    core::VariableDerived *VD = dynamic_cast<core::VariableDerived *>(VB);
#endif
    auto obj = Info.RecMap.insert(std::make_pair(Variable, _BP5WriterRec()));
    auto obj = Info.RecNameMap.insert(std::make_pair(VB->m_Name, _BP5WriterRec()));
    BP5WriterRec Rec = &obj.first->second;
    if (Type == DataType::String)
        ElemSize = sizeof(char *);
@@ -550,6 +555,8 @@ BP5Serializer::BP5WriterRec BP5Serializer::CreateWriterRec(void *Variable, const
        struct_list[0].struct_size = (int)SD->StructSize();

        FMFormat Format = register_data_format(Info.LocalFMContext, &struct_list[0]);
        free_FMfield_list(List);
        free((void *)struct_list[0].format_name);

        int IDLength;
        char *ServerID = get_server_ID_FMformat(Format, &IDLength);
@@ -636,6 +643,8 @@ BP5Serializer::BP5WriterRec BP5Serializer::CreateWriterRec(void *Variable, const
        // Changing the formats renders these invalid
        Info.MetaFormat = NULL;
    }
    if (TextStructID)
        free((void *)TextStructID);
    Info.RecCount++;
    return Rec;
}
@@ -1250,7 +1259,7 @@ BufferV *BP5Serializer::ReinitStepData(BufferV *DataBuffer, bool forceCopyDeferr

void BP5Serializer::CollectFinalShapeValues()
{
    for (auto it : Info.RecMap)
    for (auto it : Info.RecNameMap)
    {
        BP5WriterRec Rec = &it.second;
        if (Rec->Shape == ShapeID::GlobalArray)
+1 −1
Original line number Diff line number Diff line
@@ -167,7 +167,7 @@ private:
        FMFormat AttributeFormat = NULL;
        void *AttributeData = NULL;
        int AttributeSize = 0;
        std::unordered_map<void *, _BP5WriterRec> RecMap;
        std::unordered_map<std::string, _BP5WriterRec> RecNameMap;
    };

    FMFormat GenericAttributeFormat = NULL;
Loading