]> granicus.if.org Git - vim/commitdiff
patch 7.4.1656 v7.4.1656
authorBram Moolenaar <Bram@vim.org>
Sat, 26 Mar 2016 17:20:41 +0000 (18:20 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 26 Mar 2016 17:20:41 +0000 (18:20 +0100)
Problem:    Crash when using partial with a timer.
Solution:   Increment partial reference count. (Hirohito Higashi)

src/eval.c
src/testdir/test_timers.vim
src/version.c

index 225658921c09c1235b614826d5dd88aa24f898af..06f3585b30a23040255a1bdbcc6a241f0da0c327 100644 (file)
@@ -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;
index 9f58a359096c8e2795e11c1a8ff15b9decfa1fca..7ef51e5b5d881769347fa68298ff178d66d47c1c 100644 (file)
@@ -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
index a3d6e1eeb33aee591f27acf478aea88d5d3bd50c..28ac3e5d8060042307c3d2bb4819230d1eddf1a6 100644 (file)
@@ -748,6 +748,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1656,
 /**/
     1655,
 /**/