From 02f13b42522b5a608fb2d2b9170c32707ea9be5e Mon Sep 17 00:00:00 2001 From: conrad Date: Mon, 3 May 2021 12:04:23 +1000 Subject: [PATCH] more robust handling of low memory conditions --- include/armadillo_bits/Mat_meat.hpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/include/armadillo_bits/Mat_meat.hpp b/include/armadillo_bits/Mat_meat.hpp index 7dae1f0f..4dc0cf77 100644 --- a/include/armadillo_bits/Mat_meat.hpp +++ b/include/armadillo_bits/Mat_meat.hpp @@ -24,7 +24,7 @@ Mat::~Mat() { arma_extra_debug_sigprint_this(this); - if(n_alloc > arma_config::mat_prealloc) + if(n_alloc > 0) { arma_extra_debug_print("Mat::destructor: releasing memory"); memory::release( access::rw(mem) ); @@ -363,8 +363,8 @@ Mat::init_warm(uword in_n_rows, uword in_n_cols) if(new_n_elem > 0) { arma_extra_debug_print("Mat::init(): using local memory"); } - access::rw(mem) = (new_n_elem == 0) ? nullptr : mem_local; - access::rw(n_alloc) = 0; + access::rw(mem) = (new_n_elem == 0) ? nullptr : mem_local; + access::rw(n_alloc) = 0; } else // condition: new_n_elem > arma_config::mat_prealloc { @@ -374,11 +374,12 @@ Mat::init_warm(uword in_n_rows, uword in_n_cols) { arma_extra_debug_print("Mat::init(): releasing memory"); memory::release( access::rw(mem) ); + access::rw(n_alloc) = 0; // in case memory::acquire() throws an exception } arma_extra_debug_print("Mat::init(): acquiring memory"); - access::rw(mem) = memory::acquire(new_n_elem); - access::rw(n_alloc) = new_n_elem; + access::rw(mem) = memory::acquire(new_n_elem); + access::rw(n_alloc) = new_n_elem; } else // condition: new_n_elem <= n_alloc {