about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/debug.cpp18
-rw-r--r--src/debug.h7
-rw-r--r--src/gemma.cpp8
3 files changed, 22 insertions, 11 deletions
diff --git a/src/debug.cpp b/src/debug.cpp
index 9f9f862..529d603 100644
--- a/src/debug.cpp
+++ b/src/debug.cpp
@@ -216,7 +216,7 @@ int gsl_matrix_safe_memcpy (gsl_matrix *dest, const gsl_matrix *src) {
   return gsl_matrix_memcpy(dest,src);
 }
 
-void do_gsl_matrix_safe_free (gsl_matrix *m, const char *__pretty_function, const char *__file, int __line) {
+void do_gsl_matrix_safe_free (gsl_matrix *m, const char *__pretty_function, const char *__file, int __line, bool warn_only) {
   enforce(m);
   if (is_strict_mode() && is_check_mode() && is_debug_mode()) {
     bool has_NaN = has_nan(m);
@@ -228,10 +228,18 @@ void do_gsl_matrix_safe_free (gsl_matrix *m, const char *__pretty_function, cons
       msg += "x";
       msg += std::to_string(m->size2);
       msg += ")";
-      if (has_Inf)
-        warnfail_at_msg(is_strict_mode(),__pretty_function,__file,__line,(msg+" contains Infinite on free!").c_str());
-      if (has_NaN)
-        warnfail_at_msg(is_strict_mode(),__pretty_function,__file,__line,(msg+" contains NaN on free!").c_str());
+      if (warn_only) {
+        if (has_Inf)
+          warning_at_msg(__file,__line,(msg+" contains Infinite on free!").c_str());
+        if (has_NaN)
+          warning_at_msg(__file,__line,(msg+" contains NaN on free!").c_str());
+      }
+      else {
+        if (has_Inf)
+          warnfail_at_msg(is_strict_mode(),__pretty_function,__file,__line,(msg+" contains Infinite on free!").c_str());
+        if (has_NaN)
+          warnfail_at_msg(is_strict_mode(),__pretty_function,__file,__line,(msg+" contains NaN on free!").c_str());
+      }
     }
   }
   return gsl_matrix_free(m);
diff --git a/src/debug.h b/src/debug.h
index a665a37..07adbc2 100644
--- a/src/debug.h
+++ b/src/debug.h
@@ -64,7 +64,8 @@ void write(const gsl_matrix *m, const char *msg = "");
 gsl_matrix *gsl_matrix_safe_alloc(size_t rows,size_t cols);
 int gsl_matrix_safe_memcpy (gsl_matrix *dest, const gsl_matrix *src);
 void gsl_matrix_safe_free (gsl_matrix *v);
-void do_gsl_matrix_safe_free (gsl_matrix *m, const char *__pretty_function, const char *__file, int __line);
+void gsl_matrix_warn_free (gsl_matrix *v);
+void do_gsl_matrix_safe_free (gsl_matrix *m, const char *__pretty_function, const char *__file, int __line, bool warn_only);
 
 double do_gsl_matrix_safe_get (const gsl_matrix * m, const size_t i, const size_t j, const char *__pretty_function, const char *__file, int __line);
 #define gsl_matrix_safe_get(m,i,j) do_gsl_matrix_safe_get(m, i, j,__SHOW_FUNC,__FILE__,__LINE__);
@@ -186,7 +187,9 @@ inline void __enforce_fail(const char *__assertion, const char *__file,
                 ((std::string(__STRING(fn)) + " " + fn + ": " + msg).c_str()));
 
 #define gsl_matrix_safe_free(m) \
-  do_gsl_matrix_safe_free(m,__SHOW_FUNC,__FILE__,__LINE__);
+  do_gsl_matrix_safe_free(m,__SHOW_FUNC,__FILE__,__LINE__,false);
+#define gsl_matrix_warn_free(m) \
+  do_gsl_matrix_safe_free(m,__SHOW_FUNC,__FILE__,__LINE__,true);
 #define gsl_vector_safe_free(v) \
   do_gsl_vector_safe_free(v,__SHOW_FUNC,__FILE__,__LINE__);
 
diff --git a/src/gemma.cpp b/src/gemma.cpp
index f928977..c3caa96 100644
--- a/src/gemma.cpp
+++ b/src/gemma.cpp
@@ -2837,14 +2837,14 @@ void GEMMA::BatchRun(PARAM &cPar) {
     // release all matrices and vectors
     gsl_matrix_safe_free(Y);
     gsl_matrix_safe_free(W);
-    gsl_matrix_safe_free(B);
-    gsl_matrix_safe_free(se_B);
-    gsl_matrix_safe_free(G);
+    gsl_matrix_warn_free(B); // sometimes unused
+    gsl_matrix_warn_free(se_B);
+    gsl_matrix_warn_free(G);
     gsl_matrix_safe_free(U);
     gsl_matrix_safe_free(UtW);
     gsl_matrix_safe_free(UtY);
     gsl_vector_safe_free(eval);
-    gsl_vector_safe_free(env);
+    gsl_vector_free(env); // sometimes unused
   }
 
   // BSLMM