From: Bram Moolenaar Date: Wed, 7 Feb 2007 02:41:57 +0000 (+0000) Subject: updated for version 7.0-192 X-Git-Tag: v7.0.192 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=47b8b15b5f7f62d65e6ef55f5042453e2735055d;p=vim updated for version 7.0-192 --- 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 @@ -666,6 +666,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 192, /**/ 191, /**/