diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-03-26 18:20:41 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-03-26 18:20:41 +0100 |
commit | 92e35efaf6a3278e4729115648997f09cd4005f5 (patch) | |
tree | 3bc925088f60a9d49de94350faff812ec662cf90 | |
parent | 1e7885abe8daa793fd9328d0fd6c456214cb467e (diff) | |
download | vim-git-92e35efaf6a3278e4729115648997f09cd4005f5.tar.gz |
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.c | 1 | ||||
-rw-r--r-- | src/testdir/test_timers.vim | 13 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 16 insertions, 0 deletions
diff --git a/src/eval.c b/src/eval.c index 225658921..06f3585b3 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 9f58a3590..7ef51e5b5 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 a3d6e1eeb..28ac3e5d8 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, |