Commit 6f17d46b authored by Mark OLESEN's avatar Mark OLESEN
Browse files

BUG: avoid memory leak caused by IOobjectList::filterObjects (#1286)

parent 29f40170
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2018 OpenCFD Ltd. \\ / A nd | Copyright (C) 2018-2019 OpenCFD Ltd.
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
...@@ -622,11 +622,16 @@ Foam::label Foam::IOobjectList::filterClasses ...@@ -622,11 +622,16 @@ Foam::label Foam::IOobjectList::filterClasses
const bool pruning const bool pruning
) )
{ {
// return HashPtrTable<IOobject>::filterValues // This is like
// ( // return HashPtrTable<IOobject>::filterValues
// [&](const IOobject* io){ return pred(io->headerClassName()); }, // (
// pruning // [&](const IOobject* io){ return pred(io->headerClassName()); },
// ); // pruning
// );
// which is really
// return HashTable<IOobject*>::filterValues
//
// except that it does not leak
label changed = 0; label changed = 0;
...@@ -654,7 +659,29 @@ Foam::label Foam::IOobjectList::filterObjects ...@@ -654,7 +659,29 @@ Foam::label Foam::IOobjectList::filterObjects
const bool pruning const bool pruning
) )
{ {
return HashPtrTable<IOobject>::filterKeys(pred, pruning); // This is like
// return HashPtrTable<IOobject>::filterKeys(pred, pruning);
// which is really
// return HashTable<IOobject*>::filterKeys(pred, pruning);
//
// except that it does not leak
label changed = 0;
for (iterator iter = begin(); iter != end(); ++iter)
{
// Matches? either prune (pruning) or keep (!pruning)
if
(
(pred(iter.key()) ? pruning : !pruning)
&& erase(iter)
)
{
++changed;
}
}
return changed;
} }
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment