summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2007-02-07 02:41:57 +0000
committerBram Moolenaar <Bram@vim.org>2007-02-07 02:41:57 +0000
commit47b8b15b5f7f62d65e6ef55f5042453e2735055d (patch)
tree6db0328d36b0a3375cb87489a52c7188f1ba0282
parent48b66fb5a7197c79c05de133dddc8563cc942d9b (diff)
downloadvim-git-47b8b15b5f7f62d65e6ef55f5042453e2735055d.tar.gz
updated for version 7.0-192v7.0.192
-rw-r--r--src/globals.h4
-rw-r--r--src/memfile.c7
-rw-r--r--src/memline.c13
-rw-r--r--src/version.c2
4 files changed, 18 insertions, 8 deletions
diff --git a/src/globals.h b/src/globals.h
index a7cc1716f..54785a4f1 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -555,6 +555,10 @@ EXTERN buf_T *firstbuf INIT(= NULL); /* first buffer */
EXTERN buf_T *lastbuf INIT(= NULL); /* last buffer */
EXTERN buf_T *curbuf INIT(= NULL); /* currently active buffer */
+/* Flag that is set when switching off 'swapfile'. It means that all blocks
+ * are to be loaded into memory. Shouldn't be global... */
+EXTERN int mf_dont_release INIT(= FALSE); /* don't release blocks */
+
/*
* List of files being edited (global argument list). curwin->w_alist points
* to this when the window is using the global argument list.
diff --git a/src/memfile.c b/src/memfile.c
index eac0c0877..d5caf3b9a 100644
--- a/src/memfile.c
+++ b/src/memfile.c
@@ -76,7 +76,6 @@ extern int dos2; /* this is in os_amiga.c */
#define MEMFILE_PAGE_SIZE 4096 /* default page size */
static long_u total_mem_used = 0; /* total memory used for memfiles */
-static int dont_release = FALSE; /* don't release blocks */
static void mf_ins_hash __ARGS((memfile_T *, bhdr_T *));
static void mf_rem_hash __ARGS((memfile_T *, bhdr_T *));
@@ -279,10 +278,10 @@ mf_close_file(buf, getlines)
if (getlines)
{
/* get all blocks in memory by accessing all lines (clumsy!) */
- dont_release = TRUE;
+ mf_dont_release = TRUE;
for (lnum = 1; lnum <= buf->b_ml.ml_line_count; ++lnum)
(void)ml_get_buf(buf, lnum, FALSE);
- dont_release = FALSE;
+ mf_dont_release = FALSE;
/* TODO: should check if all blocks are really in core */
}
@@ -830,7 +829,7 @@ mf_release(mfp, page_count)
buf_T *buf;
/* don't release while in mf_close_file() */
- if (dont_release)
+ if (mf_dont_release)
return NULL;
/*
diff --git a/src/memline.c b/src/memline.c
index b8d13d942..6f59a9a9c 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -2074,8 +2074,10 @@ errorret:
/*
* See if it is the same line as requested last time.
* Otherwise may need to flush last used line.
+ * Don't use the last used line when 'swapfile' is reset, need to load all
+ * blocks.
*/
- if (buf->b_ml.ml_line_lnum != lnum)
+ if (buf->b_ml.ml_line_lnum != lnum || mf_dont_release)
{
ml_flush_line(buf);
@@ -3200,13 +3202,16 @@ ml_find_line(buf, lnum, action)
* If not, flush and release the locked block.
* Don't do this for ML_INSERT_SAME, because the stack need to be updated.
* Don't do this for ML_FLUSH, because we want to flush the locked block.
+ * Don't do this when 'swapfile' is reset, we want to load all the blocks.
*/
if (buf->b_ml.ml_locked)
{
- if (ML_SIMPLE(action) && buf->b_ml.ml_locked_low <= lnum
- && buf->b_ml.ml_locked_high >= lnum)
+ if (ML_SIMPLE(action)
+ && buf->b_ml.ml_locked_low <= lnum
+ && buf->b_ml.ml_locked_high >= lnum
+ && !mf_dont_release)
{
- /* remember to update pointer blocks and stack later */
+ /* remember to update pointer blocks and stack later */
if (action == ML_INSERT)
{
++(buf->b_ml.ml_locked_lineadd);
diff --git a/src/version.c b/src/version.c
index 55fdbac99..676f901f2 100644
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 192,
+/**/
191,
/**/
190,