aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2011-03-19 01:06:50 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2011-03-19 01:06:50 +0100
commit290205dfc049abc5a92c1191740b30fa91130ade (patch)
tree0d07fea8597fb5d7f023a23cce7cb0b240be84c2 /Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h
parent5991d247f9b167ed738ef95ead0b5ee9a0248edd (diff)
fix memory leak when a custom scalar throw an exception
Diffstat (limited to 'Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h')
-rw-r--r--Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h6
1 files changed, 2 insertions, 4 deletions
diff --git a/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h b/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h
index 39495c1a2..562c9c5ad 100644
--- a/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h
+++ b/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h
@@ -83,10 +83,10 @@ struct general_matrix_matrix_triangular_product<Index,LhsScalar,LhsStorageOrder,
if(mc > Traits::nr)
mc = (mc/Traits::nr)*Traits::nr;
- LhsScalar* blockA = ei_aligned_stack_new(LhsScalar, kc*mc);
std::size_t sizeW = kc*Traits::WorkSpaceFactor;
std::size_t sizeB = sizeW + kc*size;
- RhsScalar* allocatedBlockB = ei_aligned_stack_new(RhsScalar, sizeB);
+ ei_declare_aligned_stack_constructed_variable(LhsScalar, blockA, kc*mc, 0);
+ ei_declare_aligned_stack_constructed_variable(RhsScalar, allocatedBlockB, sizeB, 0);
RhsScalar* blockB = allocatedBlockB + sizeW;
gemm_pack_lhs<LhsScalar, Index, Traits::mr, Traits::LhsProgress, LhsStorageOrder> pack_lhs;
@@ -125,8 +125,6 @@ struct general_matrix_matrix_triangular_product<Index,LhsScalar,LhsStorageOrder,
}
}
}
- ei_aligned_stack_delete(LhsScalar, blockA, kc*mc);
- ei_aligned_stack_delete(RhsScalar, allocatedBlockB, sizeB);
}
};