patch 7.4.1866
Problem: Invalid memory access when exiting with EXITFREE defined.
(Dominique Pelle)
Solution: Set "really_exiting" and skip error messages.
diff --git a/src/eval.c b/src/eval.c
index 3d0abf3..a49d54b 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -25348,7 +25348,11 @@
{
fp = find_func(name);
if (fp == NULL)
- EMSG2(_(e_intern2), "func_unref()");
+ {
+ /* Ignore when invoked through free_all_mem(). */
+ if (!really_exiting)
+ EMSG2(_(e_intern2), "func_unref()");
+ }
else if (--fp->uf_refcount <= 0)
{
/* Only delete it when it's not being used. Otherwise it's done
diff --git a/src/misc2.c b/src/misc2.c
index b4e9479..f7b1de3 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -1044,6 +1044,9 @@
return;
entered = TRUE;
+ /* Set this flag to indicate some errors can be ignored. */
+ really_exiting = TRUE;
+
# ifdef FEAT_AUTOCMD
/* Don't want to trigger autocommands from here on. */
block_autocmds();
diff --git a/src/version.c b/src/version.c
index 7952a14..f9305d5 100644
--- a/src/version.c
+++ b/src/version.c
@@ -754,6 +754,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1866,
+/**/
1865,
/**/
1864,