From f41525d378b18496bc25b4733857072511130c18 Mon Sep 17 00:00:00 2001 From: pkv Date: Thu, 17 Sep 2015 16:10:18 +0300 Subject: [PATCH] 0026616: Memory leak in IntTools_Context::Hatcher class IntTools_Context - method: Geom2dHatch_Hatcher& IntTools_Context::Hatcher (const TopoDS_Face& aF) - method: IntTools_SurfaceRangeLocalizeData& IntTools_Context::SurfaceData (const TopoDS_Face& aF) The memory allocation is provided using inner allocator of the object. Test-case for issue #26616 --- src/IntTools/IntTools_Context.cxx | 13 ++++++++----- tests/bugs/modalg_6/bug26616 | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 tests/bugs/modalg_6/bug26616 diff --git a/src/IntTools/IntTools_Context.cxx b/src/IntTools/IntTools_Context.cxx index 1d7fd8c73b..4eaadcb346 100644 --- a/src/IntTools/IntTools_Context.cxx +++ b/src/IntTools/IntTools_Context.cxx @@ -400,10 +400,11 @@ Geom2dHatch_Hatcher& IntTools_Context::Hatcher(const TopoDS_Face& aF) aEpsT=Precision::PConfusion(); // Geom2dHatch_Intersector aIntr(aTolArcIntr, aTolTangfIntr); - pHatcher=new Geom2dHatch_Hatcher(aIntr, - aTolHatch2D, aTolHatch3D, - Standard_True, Standard_False); - + pHatcher=(Geom2dHatch_Hatcher*) + myAllocator->Allocate(sizeof(Geom2dHatch_Hatcher)); + new (pHatcher) Geom2dHatch_Hatcher(aIntr, + aTolHatch2D, aTolHatch3D, + Standard_True, Standard_False); // aFF=aF; aFF.Orientation(TopAbs_FORWARD); @@ -450,7 +451,9 @@ IntTools_SurfaceRangeLocalizeData& IntTools_Context::SurfaceData IntTools_SurfaceRangeLocalizeData* pSData; // if (!myProjSDataMap.IsBound(aF)) { - pSData=new IntTools_SurfaceRangeLocalizeData + pSData=(IntTools_SurfaceRangeLocalizeData*) + myAllocator->Allocate(sizeof(IntTools_SurfaceRangeLocalizeData)); + new (pSData) IntTools_SurfaceRangeLocalizeData (3, 3, 10. * Precision::PConfusion(), diff --git a/tests/bugs/modalg_6/bug26616 b/tests/bugs/modalg_6/bug26616 new file mode 100644 index 0000000000..64891ba196 --- /dev/null +++ b/tests/bugs/modalg_6/bug26616 @@ -0,0 +1,17 @@ +puts "========" +puts "OCC26616" +puts "========" +puts "" +############################################ +# Memory leak in IntTools_Context::Hatcher +############################################ + +restore [locate_data_file OCC26635_t0.brep] t0 +restore [locate_data_file OCC26635_t1.brep] t1 +bfuse res t0 t1 +set m0 [meminfo w] +repeat 10 {bfuse res t0 t1} +set m1 [meminfo w] +if {[expr {$m1 - $m0}] > 1048576} { + puts "ERROR: OCC26616 is reproduced. Memory leak has been detected." +} -- 2.20.1