# HG changeset patch # User Christian Brabandt # Date 1459013406 -3600 # Node ID 986f7c00d43d0508ccd2afb1d8202c388f770888 # Parent 2eb83181377223128481fc63eb0790ac6528be97 commit https://github.com/vim/vim/commit/92e35efaf6a3278e4729115648997f09cd4005f5 Author: Bram Moolenaar Date: Sat Mar 26 18:20:41 2016 +0100 patch 7.4.1656 Problem: Crash when using partial with a timer. Solution: Increment partial reference count. (Hirohito Higashi) diff --git a/src/eval.c b/src/eval.c --- a/src/eval.c +++ b/src/eval.c @@ -20190,6 +20190,7 @@ get_callback(typval_T *arg, partial_T ** 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 --- 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 --- 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,