Hi everybody

On Fr, 23 Nov 2012, Ike Devolder wrote:
> but the following i can reproduce every time:
> 
> same configuration as before, same file (index.php)
> - open index.php (it still has the syntax error
> - :w (syntastic kicks in)
> - fix the error by adding ; after phpinfo()
> - :w (no more error in the file)
> - remove the ; again
> - :w (syntastic kicks in)
> - :w ->E776: No location list
> 
> "index.php" 2L, 16C written
> Error detected while processing function 
> <SNR>31_UpdateErrors..<SNR>31_AutoToggleLocList..<SNR>31_ShowLocList:
> line    3:
> E776: No location list
> Press ENTER or type command to continue
> 
> no crash in this case, if i continue after this issue i get a second quickfix 
> buffer.
> 
> thx for the intermediate fix it is definatly an improvement.

The following patch seems to fix all the issues mentioned so far. It 
basically does this by reverting Patch 7.3.715 and making sure, no data 
is freed more than once. Unfortunately, I have not been able to come up 
with a simple test case for the syntastic problem, that could be 
included.

If anybody can come up with such a test (using no plugin, but just using 
vim -u NONE -U NONE -N) a tip is appreciated.

regards,
Christian
-- 
Ich bin geldgierig. Als Finanzminister muß man geldgierig sein.
                -- Hans Eichel

-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
diff --git a/src/quickfix.c b/src/quickfix.c
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -898,11 +898,7 @@
      * way with ":grep'.
      */
     while (qi->qf_listcount > qi->qf_curlist + 1)
-    {
-	if (wp != NULL && wp->w_llist == qi)
-	    wp->w_llist = NULL;
 	qf_free(qi, --qi->qf_listcount);
-    }
 
     /*
      * When the stack is full, remove to oldest entry
@@ -910,8 +906,6 @@
      */
     if (qi->qf_listcount == LISTCOUNT)
     {
-	if (wp != NULL && wp->w_llist == qi)
-	    wp->w_llist = NULL;
 	qf_free(qi, 0);
 	for (i = 1; i < LISTCOUNT; ++i)
 	    qi->qf_lists[i - 1] = qi->qf_lists[i];
@@ -2135,13 +2129,17 @@
     while (qi->qf_lists[idx].qf_count)
     {
 	qfp = qi->qf_lists[idx].qf_start->qf_next;
-	vim_free(qi->qf_lists[idx].qf_start->qf_text);
-	vim_free(qi->qf_lists[idx].qf_start->qf_pattern);
-	vim_free(qi->qf_lists[idx].qf_start);
+	if (qi->qf_lists[idx].qf_title != NULL)
+	{
+	    vim_free(qi->qf_lists[idx].qf_start->qf_text);
+	    vim_free(qi->qf_lists[idx].qf_start->qf_pattern);
+	    vim_free(qi->qf_lists[idx].qf_start);
+	}
 	qi->qf_lists[idx].qf_start = qfp;
 	--qi->qf_lists[idx].qf_count;
     }
-    vim_free(qi->qf_lists[idx].qf_title);
+    if (qi->qf_lists[idx].qf_title != NULL)
+	vim_free(qi->qf_lists[idx].qf_title);
     qi->qf_lists[idx].qf_title = NULL;
 }
 

Raspunde prin e-mail lui