[pure-lang-svn] SF.net SVN: pure-lang:[770] pure/trunk/runtime.cc
Status: Beta
Brought to you by:
agraef
|
From: <ag...@us...> - 2008-09-16 12:22:17
|
Revision: 770
http://pure-lang.svn.sourceforge.net/pure-lang/?rev=770&view=rev
Author: agraef
Date: 2008-09-16 12:22:28 +0000 (Tue, 16 Sep 2008)
Log Message:
-----------
Bugfixes.
Modified Paths:
--------------
pure/trunk/runtime.cc
Modified: pure/trunk/runtime.cc
===================================================================
--- pure/trunk/runtime.cc 2008-09-16 12:07:48 UTC (rev 769)
+++ pure/trunk/runtime.cc 2008-09-16 12:22:28 UTC (rev 770)
@@ -272,36 +272,36 @@
static void pure_free_matrix(pure_expr *x)
{
-#ifdef HAVE_GSL
assert(x->data.mat && "pure_free_matrix: null data");
assert(x->data.mat->refc > 0 && "pure_free_matrix: unreferenced data");
assert(x->data.mat->p && "pure_free_matrix: corrupt data");
- if (--x->data.mat->refc == 0) {
- switch (x->tag) {
- case EXPR::MATRIX: {
- gsl_matrix *m = (gsl_matrix*)x->data.mat->p;
- m->owner = 1;
- gsl_matrix_free(m);
- break;
- }
- case EXPR::CMATRIX: {
- gsl_matrix_complex *m = (gsl_matrix_complex*)x->data.mat->p;
- m->owner = 1;
- gsl_matrix_complex_free(m);
- break;
- }
- case EXPR::IMATRIX: {
- gsl_matrix_int *m = (gsl_matrix_int*)x->data.mat->p;
- m->owner = 1;
- gsl_matrix_int_free(m);
- break;
- }
- default:
- assert(0 && "pure_free_matrix: corrupt data");
- break;
- }
+ bool owner = --x->data.mat->refc == 0;
+#ifdef HAVE_GSL
+ switch (x->tag) {
+ case EXPR::MATRIX: {
+ gsl_matrix *m = (gsl_matrix*)x->data.mat->p;
+ m->owner = owner;
+ gsl_matrix_free(m);
+ break;
}
+ case EXPR::CMATRIX: {
+ gsl_matrix_complex *m = (gsl_matrix_complex*)x->data.mat->p;
+ m->owner = owner;
+ gsl_matrix_complex_free(m);
+ break;
+ }
+ case EXPR::IMATRIX: {
+ gsl_matrix_int *m = (gsl_matrix_int*)x->data.mat->p;
+ m->owner = owner;
+ gsl_matrix_int_free(m);
+ break;
+ }
+ default:
+ assert(0 && "pure_free_matrix: corrupt data");
+ break;
+ }
#endif
+ if (owner) free(x->data.mat);
}
#if 1
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|