From 4e4068e44f4df06f352543c679da9079d1ffcb67 Mon Sep 17 00:00:00 2001 From: wmayer Date: Fri, 9 Apr 2021 16:59:33 +0200 Subject: [PATCH] Py: fix memory leak --- src/Mod/Part/App/TopoShapeFacePyImp.cpp | 13 +++++++------ src/Mod/Part/App/TopoShapeVertexPyImp.cpp | 4 +++- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/Mod/Part/App/TopoShapeFacePyImp.cpp b/src/Mod/Part/App/TopoShapeFacePyImp.cpp index cd0ff350a1..ea6cd98bdf 100644 --- a/src/Mod/Part/App/TopoShapeFacePyImp.cpp +++ b/src/Mod/Part/App/TopoShapeFacePyImp.cpp @@ -977,13 +977,14 @@ Py::Object TopoShapeFacePy::getWire(void) const Py::Object TopoShapeFacePy::getOuterWire(void) const { - const TopoDS_Shape& clSh = getTopoShapePtr()->getShape(); - if (clSh.IsNull()) + const TopoDS_Shape& shape = getTopoShapePtr()->getShape(); + if (shape.IsNull()) throw Py::RuntimeError("Null shape"); - if (clSh.ShapeType() == TopAbs_FACE) { - TopoDS_Face clFace = (TopoDS_Face&)clSh; - TopoDS_Wire clWire = ShapeAnalysis::OuterWire(clFace); - return Py::Object(new TopoShapeWirePy(new TopoShape(clWire)),true); + if (shape.ShapeType() == TopAbs_FACE) { + TopoDS_Wire wire = ShapeAnalysis::OuterWire(TopoDS::Face(shape)); + Base::PyObjectBase* wirepy = new TopoShapeWirePy(new TopoShape(wire)); + wirepy->setNotTracking(); + return Py::asObject(wirepy); } else { throw Py::TypeError("Internal error, TopoDS_Shape is not a face!"); diff --git a/src/Mod/Part/App/TopoShapeVertexPyImp.cpp b/src/Mod/Part/App/TopoShapeVertexPyImp.cpp index 6c7dd4bba0..35ba09393e 100644 --- a/src/Mod/Part/App/TopoShapeVertexPyImp.cpp +++ b/src/Mod/Part/App/TopoShapeVertexPyImp.cpp @@ -194,7 +194,9 @@ Py::Object TopoShapeVertexPy::getPoint(void) const try { const TopoDS_Vertex& v = TopoDS::Vertex(getTopoShapePtr()->getShape()); gp_Pnt p = BRep_Tool::Pnt(v); - return Py::asObject(new Base::VectorPy(new Base::Vector3d(p.X(),p.Y(),p.Z()))); + Base::PyObjectBase* pnt = new Base::VectorPy(new Base::Vector3d(p.X(),p.Y(),p.Z())); + pnt->setNotTracking(); + return Py::asObject(pnt); } catch (Standard_Failure& e) {