From 85459327ba76d674572ad96dc459c97e4a71e88d Mon Sep 17 00:00:00 2001 From: Dane Summers Date: Wed, 30 Apr 2014 08:20:27 -0400 Subject: Prevent preserve_exit() from executing more than once. https://github.com/neovim/neovim/issues/563 --- src/misc1.c | 9 ++++++--- src/os/signal.c | 3 +-- 2 files changed, 7 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/misc1.c b/src/misc1.c index 3f8a1b934a..dbe4064b47 100644 --- a/src/misc1.c +++ b/src/misc1.c @@ -3373,12 +3373,15 @@ void preserve_exit(void) { buf_T *buf; - prepare_to_exit(); + // Prevent repeated calls into this method. + if (really_exiting) { + exit(2); + } - /* Setting this will prevent free() calls. That avoids calling free() - * recursively when free() was invoked with a bad pointer. */ really_exiting = TRUE; + prepare_to_exit(); + out_str(IObuff); screen_start(); /* don't know where cursor is now */ out_flush(); diff --git a/src/os/signal.c b/src/os/signal.c index 87eb379014..d3bedad09c 100644 --- a/src/os/signal.c +++ b/src/os/signal.c @@ -139,8 +139,7 @@ static void deadly_signal(int signum) snprintf((char *)IObuff, sizeof(IObuff), "Vim: Caught deadly signal '%s'\n", signal_name(signum)); - // Preserve files and exit. This sets the really_exiting flag to prevent - // calling free(). + // Preserve files and exit. preserve_exit(); } -- cgit