Skip to content

Commit

Permalink
Converter/Generator: fix mem leaks in G.close and convertArray2NGon
Browse files Browse the repository at this point in the history
  • Loading branch information
vincentcasseau committed Aug 30, 2024
1 parent 0f5f917 commit 0700bb4
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 21 deletions.
18 changes: 11 additions & 7 deletions Cassiopee/Converter/Converter/convertStruct2NGon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -386,10 +386,14 @@ PyObject* K_CONVERTER::convertStruct2NGon(PyObject* self, PyObject* args)
E_Bool rmOverlappingPts=true; E_Bool rmOrphanPts=false;
E_Bool rmDuplicatedFaces=true; E_Bool rmDuplicatedElts=false;
E_Bool rmDegeneratedFaces=true; E_Bool rmDegeneratedElts=false;
tpl = K_CONNECT::V_cleanConnectivity(varString, *f2, *cn2, "NGON", tol,
rmOverlappingPts, rmOrphanPts,
rmDuplicatedFaces, rmDuplicatedElts,
rmDegeneratedFaces, rmDegeneratedElts);
delete f2; delete cn2;
return tpl;
}
PyObject* tplClean = K_CONNECT::V_cleanConnectivity(
varString, *f2, *cn2, "NGON", tol,
rmOverlappingPts, rmOrphanPts,
rmDuplicatedFaces, rmDuplicatedElts,
rmDegeneratedFaces, rmDegeneratedElts
);

RELEASESHAREDU(tpl, f2, cn2);
if (tplClean == NULL) return tpl;
else { Py_DECREF(tpl); return tplClean; }
}
18 changes: 11 additions & 7 deletions Cassiopee/Converter/Converter/convertUnstruct2NGon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -381,10 +381,14 @@ PyObject* K_CONVERTER::convertUnstruct2NGon(PyObject* self, PyObject* args)
E_Bool rmOverlappingPts=true; E_Bool rmOrphanPts=false;
E_Bool rmDuplicatedFaces=true; E_Bool rmDuplicatedElts=false;
E_Bool rmDegeneratedFaces=false; E_Bool rmDegeneratedElts=false;
tpl = K_CONNECT::V_cleanConnectivity(varString, *f2, *cn2, "NGON", tol,
rmOverlappingPts, rmOrphanPts,
rmDuplicatedFaces, rmDuplicatedElts,
rmDegeneratedFaces, rmDegeneratedElts);
delete f2; delete cn2;
return tpl;
}
PyObject* tplClean = K_CONNECT::V_cleanConnectivity(
varString, *f2, *cn2, "NGON", tol,
rmOverlappingPts, rmOrphanPts,
rmDuplicatedFaces, rmDuplicatedElts,
rmDegeneratedFaces, rmDegeneratedElts
);

RELEASESHAREDU(tpl, f2, cn2);
if (tplClean == NULL) return tpl;
else { Py_DECREF(tpl); return tplClean; }
}
12 changes: 6 additions & 6 deletions Cassiopee/Generator/Generator/close.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ PyObject* K_GENERATOR::closeMesh(PyObject* self, PyObject* args)
E_Int posz = K_ARRAY::isCoordinateZPresent(varString);
if (posx == -1 || posy == -1 || posz == -1)
{
delete f;
RELEASESHAREDB(res, array, f, cn);
PyErr_SetString(PyExc_TypeError,
"close: can't find coordinates in array.");
return NULL;
Expand All @@ -68,14 +68,14 @@ PyObject* K_GENERATOR::closeMesh(PyObject* self, PyObject* args)
{
closeStructuredMesh(f->begin(posx), f->begin(posy), f->begin(posz), im, jm, km, eps);
PyObject* tpl = K_ARRAY::buildArray3(*f, varString, im, jm, km);
delete f;
RELEASESHAREDS(array, f);
return tpl;
}
else if (res == 2)
{
if (strchr(eltType, '*') != NULL)
{
delete f; delete cn;
RELEASESHAREDU(array, f, cn);
PyErr_SetString(PyExc_TypeError,
"close: array must be defined at vertices.");
return NULL;
Expand All @@ -85,10 +85,10 @@ PyObject* K_GENERATOR::closeMesh(PyObject* self, PyObject* args)
varString, *f, *cn, eltType, eps,
rmOverlappingPts, rmOrphanPts, rmDuplicatedFaces, rmDuplicatedElts,
rmDegeneratedFaces, rmDegeneratedElts);
if (tpl == NULL) tpl = K_ARRAY::buildArray3(*f, varString, *cn, eltType); // tpl = array;

delete f; delete cn;
return tpl;
RELEASESHAREDU(array, f, cn);
if (tpl == NULL) return array;
else return tpl;
}
else
{
Expand Down
2 changes: 1 addition & 1 deletion Cassiopee/Post/Post/selectExteriorFaces.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -837,9 +837,9 @@ PyObject* K_POST::selectExteriorFacesNGon3D(char* varString, FldArrayF& f,
{
e1 = cFE1[i]; // element voisin 1
e2 = cFE2[i]; // element voisin 2
E_Int* face = cn.getFace(i, nbnodes, ngon, indPG);
if ((e1 == 0 && e2 != 0) || (e2 == 0 && e1 != 0))
{
E_Int* face = cn.getFace(i, nbnodes, ngon, indPG);
sizeEF2 += nbnodes+shift; nfacesExt++;
exteriorFaces.push_back(i+1);

Expand Down

0 comments on commit 0700bb4

Please sign in to comment.