Sketcher: [skip ci] fix memory leak in GeometryFacade

This commit is contained in:
wmayer
2021-04-27 00:20:57 +02:00
parent e51f5a8aa7
commit 5a5b20df56
3 changed files with 14 additions and 2 deletions

View File

@@ -38,13 +38,13 @@ using namespace Sketcher;
TYPESYSTEM_SOURCE(Sketcher::GeometryFacade,Base::BaseClass)
GeometryFacade::GeometryFacade(): Geo(nullptr), SketchGeoExtension(nullptr)
GeometryFacade::GeometryFacade(): Geo(nullptr), OwnerGeo(false), SketchGeoExtension(nullptr)
{
}
GeometryFacade::GeometryFacade(const Part::Geometry * geometry)
: Geo(geometry)
: Geo(geometry), OwnerGeo(false)
{
if(geometry != nullptr)
initExtension();
@@ -53,6 +53,12 @@ GeometryFacade::GeometryFacade(const Part::Geometry * geometry)
}
GeometryFacade::~GeometryFacade()
{
if (OwnerGeo)
delete Geo;
}
std::unique_ptr<GeometryFacade> GeometryFacade::getFacade(Part::Geometry * geometry)
{
if(geometry != nullptr)

View File

@@ -118,7 +118,11 @@ public: // Utility methods
static bool getBlocked(const Part::Geometry * geometry);
public:
~GeometryFacade();
void setGeometry(Part::Geometry *geometry);
void setOwner(bool owner) {
OwnerGeo = owner;
}
// Geometry Extension Interface
inline virtual long getId() const override {return getGeoExt()->getId();}
@@ -198,6 +202,7 @@ private:
private:
const Part::Geometry * Geo;
bool OwnerGeo;
std::shared_ptr<const SketchGeometryExtension> SketchGeoExtension;
};

View File

@@ -1824,6 +1824,7 @@ Py::List SketchObjectPy::getGeometryFacadeList(void) const
// we create a python copy and add it to the list
std::unique_ptr<GeometryFacade> geofacade = GeometryFacade::getFacade(getSketchObjectPtr()->Geometry[i]->clone());
geofacade->setOwner(true);
Py::Object gfp = Py::Object(new GeometryFacadePy(geofacade.release()),true);