changeset 1066:bffbbb566d6b v7.0.192

updated for version 7.0-192
author vimboss
date Wed, 07 Feb 2007 02:41:57 +0000
parents caa550fe4457
children 0b056c1350dd
files src/globals.h src/memfile.c src/memline.c src/version.c
diffstat 4 files changed, 18 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/src/globals.h
+++ b/src/globals.h
@@ -555,6 +555,10 @@ EXTERN buf_T	*firstbuf INIT(= NULL);	/* 
 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.
--- a/src/memfile.c
+++ b/src/memfile.c
@@ -76,7 +76,6 @@ extern int dos2;			/* this is in os_amig
 #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;
 
     /*
--- 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);
--- 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,