aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/memory.c
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2017-02-27 10:29:46 +0100
committerGitHub <noreply@github.com>2017-02-27 10:29:46 +0100
commitc318d8e672a3b1dfe4ba7954dbca61c509c2b99c (patch)
tree282a6090dbf2d9017a3ad0a7382df08b2d320a05 /src/nvim/memory.c
parent8c8ce1832e780f87b2922ba3acf0d44f78c50931 (diff)
parenta85021068de95ef7c69b3b93b31bc32fbb154ed3 (diff)
downloadrneovim-c318d8e672a3b1dfe4ba7954dbca61c509c2b99c.tar.gz
rneovim-c318d8e672a3b1dfe4ba7954dbca61c509c2b99c.tar.bz2
rneovim-c318d8e672a3b1dfe4ba7954dbca61c509c2b99c.zip
Merge #6112 from ZyX-I/split-eval'/buf_get_changedtick
Better b:changedtick support
Diffstat (limited to 'src/nvim/memory.c')
-rw-r--r--src/nvim/memory.c26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/nvim/memory.c b/src/nvim/memory.c
index 51e0dd926e..b593936d7b 100644
--- a/src/nvim/memory.c
+++ b/src/nvim/memory.c
@@ -625,18 +625,6 @@ void free_all_mem(void)
/* Destroy all windows. Must come before freeing buffers. */
win_free_all();
- /* Free all buffers. Reset 'autochdir' to avoid accessing things that
- * were freed already. */
- p_acd = false;
- for (buf = firstbuf; buf != NULL; ) {
- bufref_T bufref;
- set_bufref(&bufref, buf);
- nextbuf = buf->b_next;
- close_buffer(NULL, buf, DOBUF_WIPE, false);
- // Didn't work, try next one.
- buf = bufref_valid(&bufref) ? nextbuf : firstbuf;
- }
-
free_cmdline_buf();
/* Clear registers. */
@@ -660,6 +648,20 @@ void free_all_mem(void)
eval_clear();
+ // Free all buffers. Reset 'autochdir' to avoid accessing things that
+ // were freed already.
+ // Must be after eval_clear to avoid it trying to access b:changedtick after
+ // freeing it.
+ p_acd = false;
+ for (buf = firstbuf; buf != NULL; ) {
+ bufref_T bufref;
+ set_bufref(&bufref, buf);
+ nextbuf = buf->b_next;
+ close_buffer(NULL, buf, DOBUF_WIPE, false);
+ // Didn't work, try next one.
+ buf = bufref_valid(&bufref) ? nextbuf : firstbuf;
+ }
+
/* screenlines (can't display anything now!) */
free_screenlines();