On Saturday, July 8, 2017 at 4:38:36 PM UTC-4, Bram Moolenaar wrote:
> Patch 8.0.0702
> Problem:    An error in a timer can make Vim unusable.
> Solution:   Don't set the error flag or exception from a timer.  Stop a timer
>             if it causes an error 3 out of 3 times.  Discard an exception
>             caused inside a timer.
> Files:      src/ex_cmds2.c, src/structs.h, src/testdir/test_timers.vim,
>             runtime/doc/eval.txt

This patch is causing segfaults for me. I've built with and without it to 
verify.

I have a timer to check a couple files and update my color scheme when they 
change. I haven't tried to narrow down any specific lines yet, but when 
TryTheme actually triggers then vim segfaults immediately. Maybe because of the 
try/catch?

Here's the code from my vimrc:

function! TryTheme(theme, ...)
  let l:background = a:0 ? a:1 : ''
  if a:theme == 'solarized'
    " force dark bg to prevent double toggle with term scheme
    let l:background = 'dark'
  endif
  if exists('g:colors_name') && g:colors_name == a:theme &&
      \ empty(l:background) || &background == l:background
    return 1
  endif
  try
    exec 'colorscheme' a:theme
  catch /^Vim\%((\a\+)\)\=:E185/
    return 0
  endtry
  if ! empty(l:background)
    let &background = l:background
  endif
  if exists('syntax_on')
    syn reset
  endif
endfunction

function! LoadTheme()
  let l:background_file = expand('~/.vim/background')
  let l:theme_file = expand('~/.vim/theme')
  let l:background = filereadable(l:background_file) ?
                   \ readfile(l:background_file)[0] : &background
  let l:theme = filereadable(l:theme_file) ?
              \ readfile(l:theme_file)[0] : 'default'
  if l:background == &background &&
      \ exists('g:colors_name') && l:theme == g:colors_name
    return 0
  endif
  " echom l:theme . " " . l:background
  call TryTheme(l:theme, l:background)
endfunction

call LoadTheme()

if has("timers")
  function! LoadThemeTimer(timer)
    call LoadTheme()
  endfunction
  let theme_timer = timer_start(1000, 'LoadThemeTimer', {'repeat': -1})
endif

-- 
-- 
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 vim_dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui