0026616: Memory leak in IntTools_Context::Hatcher
authorpkv <pkv@opencascade.com>
Thu, 17 Sep 2015 13:10:18 +0000 (16:10 +0300)
committerbugmaster <bugmaster@opencascade.com>
Thu, 17 Sep 2015 14:01:43 +0000 (17:01 +0300)
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
tests/bugs/modalg_6/bug26616 [new file with mode: 0644]

index 1d7fd8c..4eaadcb 100644 (file)
@@ -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 (file)
index 0000000..64891ba
--- /dev/null
@@ -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."
+}