Dominique Pelle wrote:
> Valgrind memory checker finds a memory leak in Vim-7.2.15.
> The steps to reproduce are a bit too messy to describe here
> and I have not been able to find a simple way to reproduce it.
> However I can reproduce it 100% of the time:
Perhaps this happens when undo is disabled?
> ==1182== 150 bytes in 2 blocks are definitely lost in loss record 24 of 34
> ==1182== at 0x4C21FEB: malloc (vg_replace_malloc.c:207)
> ==1182== by 0x4D6927: lalloc (misc2.c:859)
> ==1182== by 0x4D689A: alloc_check (misc2.c:792)
> ==1182== by 0x457EC4: do_sub (ex_cmds.c:4822)
> ==1182== by 0x465561: do_one_cmd (ex_docmd.c:2621)
> ==1182== by 0x462D41: do_cmdline (ex_docmd.c:1095)
> ==1182== by 0x45FE46: ex_listdo (ex_cmds2.c:2374)
> ==1182== by 0x465561: do_one_cmd (ex_docmd.c:2621)
> ==1182== by 0x462D41: do_cmdline (ex_docmd.c:1095)
> ==1182== by 0x4EE779: nv_colon (normal.c:5214)
> ==1182== by 0x4E775D: normal_cmd (normal.c:1181)
> ==1182== by 0x4A79EF: main_loop (main.c:1179)
> ==1182== by 0x4A7535: main (main.c:938)
>
>
> I see at least 2 'break' statements that would cause such
> a leak at lines 4994 and line 5007 in ex_cmds.c:
>
> 4979 if (new_start != NULL)
> 4980 {
> 4981 /*
> 4982 * Copy the rest of the line, that didn't match.
> 4983 * "matchcol" has to be adjusted, we use
> the end of
> 4984 * the line as reference, because the
> substitute m>
> 4985 * have changed the number of
> characters. Same for
> 4986 * "prev_matchcol".
> 4987 */
> 4988 STRCAT(new_start, sub_firstline + copycol);
> 4989 matchcol =
> (colnr_T)STRLEN(sub_firstline) - matchc>
> 4990 prev_matchcol = (colnr_T)STRLEN(sub_firstline)
> 4991 -
> prev_match>
> 4992
> 4993 if (u_savesub(lnum) != OK)
> !4994 break;
> 4995 ml_replace(lnum, new_start, TRUE);
> 4996
> 4997 if (nmatch_tl > 0)
> 4998 {
> 4999 /*
> 5000 * Matched lines have now been
> substituted and>
> 5001 * useless, delete them. The part
> after the m>
> 5002 * has been appended to new_start,
> we don't ne>
> 5003 * it in the buffer.
> 5004 */
> 5005 ++lnum;
> 5006 if (u_savedel(lnum, nmatch_tl) != OK)
> !5007 break;
>
> Attached patch fixes it.
Thanks. I'll include it.
--
The real
trick is
this: to
keep the
lines as
short as
possible
and keep
the size
the same
yet free
from the
need for
hyphena-
Dammit!! (Matthew Winn)
/// Bram Moolenaar -- [EMAIL PROTECTED] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---