summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2016-03-26 18:20:41 +0100
committerBram Moolenaar <Bram@vim.org>2016-03-26 18:20:41 +0100
commit92e35efaf6a3278e4729115648997f09cd4005f5 (patch)
tree3bc925088f60a9d49de94350faff812ec662cf90
parent1e7885abe8daa793fd9328d0fd6c456214cb467e (diff)
patch 7.4.1656v7.4.1656
Problem: Crash when using partial with a timer. Solution: Increment partial reference count. (Hirohito Higashi)
-rw-r--r--src/eval.c1
-rw-r--r--src/testdir/test_timers.vim13
-rw-r--r--src/version.c2
3 files changed, 16 insertions, 0 deletions
diff --git a/src/eval.c b/src/eval.c
index 225658921c..06f3585b30 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -20190,6 +20190,7 @@ get_callback(typval_T *arg, partial_T **pp)
if (arg->v_type == VAR_PARTIAL && arg->vval.v_partial != NULL)
{
*pp = arg->vval.v_partial;
+ ++(*pp)->pt_refcount;
return (*pp)->pt_name;
}
*pp = NULL;
diff --git a/src/testdir/test_timers.vim b/src/testdir/test_timers.vim
index 9f58a35909..7ef51e5b5d 100644
--- a/src/testdir/test_timers.vim
+++ b/src/testdir/test_timers.vim
@@ -30,3 +30,16 @@ func Test_repeat_many()
call assert_true(s:val > 1)
call assert_true(s:val < 5)
endfunc
+
+func Test_with_partial_callback()
+ let s:val = 0
+ let s:meow = {}
+ function s:meow.bite(...)
+ let s:val += 1
+ endfunction
+
+ call timer_start(50, s:meow.bite)
+ sleep 200m
+ call assert_equal(1, s:val)
+endfunc
+" vim: ts=2 sw=0 et
diff --git a/src/version.c b/src/version.c
index a3d6e1eeb3..28ac3e5d80 100644
--- a/src/version.c
+++ b/src/version.c
@@ -749,6 +749,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1656,
+/**/
1655,
/**/
1654,