Dominique Pellé wrote:
> I still see leaks in valgrind.test_alot, Most of them come from
> the child process after fork() because we don't call free_all_mem()
> in the child process. But 2 leaks (below) come from the parent process.
> Perhaps those 2 leaks need to be looked at. I will investigate them
> this weekend:
I can reproduce one of the leaks with this minimal case:
$ cat leak.vim
let s:meow = {}
function s:meow.bite(...)
endfunction
call timer_start(50, s:meow.bite)
$ valgrind --num-callers=50 --leak-check=yes \
./vim -u NONE -N -S leak.vim -c q 2> log
And log file shows this leak:
==3006== Memcheck, a memory error detector
==3006== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==3006== Using Valgrind-3.12.0.SVN and LibVEX; rerun with -h for copyright info
==3006== Command: ./vim -u NONE -N -S leak.vim -c q
==3006==
==3006==
==3006== HEAP SUMMARY:
==3006== in use at exit: 104,857 bytes in 429 blocks
==3006== total heap usage: 7,613 allocs, 7,184 frees, 1,056,377
bytes allocated
==3006==
==3006== 2 bytes in 1 blocks are definitely lost in loss record 2 of 133
==3006== at 0x4C2ABF5: malloc (vg_replace_malloc.c:299)
==3006== by 0x4E4735: lalloc (misc2.c:920)
==3006== by 0x4E4602: alloc (misc2.c:818)
==3006== by 0x4E4BA2: vim_strsave (misc2.c:1256)
==3006== by 0x453B49: f_timer_start (evalfunc.c:11934)
==3006== by 0x44110A: call_internal_func (evalfunc.c:982)
==3006== by 0x5D1605: call_func (userfunc.c:1399)
==3006== by 0x5CF418: get_func_tv (userfunc.c:512)
==3006== by 0x5D5093: ex_call (userfunc.c:2961)
==3006== by 0x46FCC3: do_one_cmd (ex_docmd.c:2925)
==3006== by 0x46C9AF: do_cmdline (ex_docmd.c:1110)
==3006== by 0x46A671: do_source (ex_cmds2.c:3983)
==3006== by 0x469C83: cmd_source (ex_cmds2.c:3596)
==3006== by 0x469BD5: ex_source (ex_cmds2.c:3571)
==3006== by 0x46FCC3: do_one_cmd (ex_docmd.c:2925)
==3006== by 0x46C9AF: do_cmdline (ex_docmd.c:1110)
==3006== by 0x46BFEB: do_cmdline_cmd (ex_docmd.c:715)
==3006== by 0x5F71D9: exe_commands (main.c:2895)
==3006== by 0x5F4595: main (main.c:780)
Repeating the line "call timer_start(50, s:meow.bite)" n times
in leak.vim results in n leaks.
I tried this patch:
diff --git a/src/evalfunc.c b/src/evalfunc.c
index f665842..0d5e209 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -11880,14 +11880,14 @@ get_callback(typval_T *arg, partial_T **pp)
}
/*
- * Unref/free "callback" and "partial" retured by get_callback().
+ * Unref/free "callback" and "partial" returned by get_callback().
*/
void
free_callback(char_u *callback, partial_T *partial)
{
if (partial != NULL)
partial_unref(partial);
- else if (callback != NULL)
+ if (callback != NULL)
{
func_unref(callback);
vim_free(callback);
It fixes the leak in this case, but it's not correct as it causes
use of freed memory in other tests. I don't see yet how to fix it.
Dominique
--
--
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
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.