aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2014-07-31 19:42:41 +0300
committerArnold D. Robbins <arnold@skeeve.com>2014-07-31 19:42:41 +0300
commit825dd9a1839ca42c4ed6152de41515958e11660d (patch)
tree084b6601e7717dd1f0059675fff0fbb3d1697c68
parent59c75072583f4460c5eca6e0aae70f36dbaecd62 (diff)
downloadegawk-825dd9a1839ca42c4ed6152de41515958e11660d.tar.gz
egawk-825dd9a1839ca42c4ed6152de41515958e11660d.tar.bz2
egawk-825dd9a1839ca42c4ed6152de41515958e11660d.zip
Clean up some memory in MPFR.
-rw-r--r--ChangeLog7
-rw-r--r--awk.h1
-rw-r--r--main.c5
-rw-r--r--mpfr.c9
4 files changed, 22 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 3cb27948..8a616f47 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,13 @@
* dfa.c: Sync with GNU grep. Mainly white space differences.
+ Unrelated:
+
+ * mpfr.c (cleanup_mpfr): New function to deallocate _mpf_t1
+ and _mpf_t2; removes some valgrind warnings.
+ * awk.h (cleanup_mpfr): Add declaration.
+ * main.c (main): Add call to `cleanup_mpfr'.
+
2014-07-25 Arnold D. Robbins <arnold@skeeve.com>
* main.c (main): Add a warning message if -M is used and gawk was
diff --git a/awk.h b/awk.h
index a322a0b2..2370a9b2 100644
--- a/awk.h
+++ b/awk.h
@@ -1567,6 +1567,7 @@ extern NODE *do_mpfr_srand(int);
extern NODE *do_mpfr_strtonum(int);
extern NODE *do_mpfr_xor(int);
extern void init_mpfr(mpfr_prec_t, const char *);
+extern void cleanup_mpfr(void);
extern NODE *mpg_node(unsigned int);
extern const char *mpg_fmt(const char *, ...);
extern int mpg_strtoui(mpz_ptr, char *, size_t, char **, int);
diff --git a/main.c b/main.c
index 2691e224..f76608c9 100644
--- a/main.c
+++ b/main.c
@@ -755,6 +755,11 @@ out:
if (do_dump_vars)
dump_vars(varfile);
+#ifdef HAVE_MPFR
+ if (do_mpfr)
+ cleanup_mpfr();
+#endif
+
if (do_tidy_mem)
release_all_vars();
diff --git a/mpfr.c b/mpfr.c
index 393a2b1a..cdd64b51 100644
--- a/mpfr.c
+++ b/mpfr.c
@@ -89,6 +89,15 @@ init_mpfr(mpfr_prec_t prec, const char *rmode)
register_exec_hook(mpg_interpret, 0);
}
+/* cleanup_mpfr --- clean stuff up, mainly for valgrind */
+
+void
+cleanup_mpfr(void)
+{
+ mpfr_clear(_mpf_t1);
+ mpfr_clear(_mpf_t2);
+}
+
/* mpg_node --- allocate a node to store MPFR float or GMP integer */
NODE *