Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Parse messages from guru on close_cb, not exit_cb #1439

Merged
merged 1 commit into from
Sep 12, 2017

Commits on Sep 11, 2017

  1. Parse messages from guru on close_cb, not exit_cb

    There is a race condition in `async_guru` in which not all messages from
    a `guru` call are displayed:
    
    1. An async `guru` call is started.
    
    2. Lines streamed from `guru` are appended to a message list in
       `callback()`.
    
    3. The `guru` process ends, `exit_cb()` is called, and the list of
       messages is processed for display.
    
    4. The rest of the lines from `guru` are appended to the message list.
    
    Note that `callback` may still be called after `exit_cb`, as noted in
    `:help exit_cb`:
    
    	"exit_cb": handler	…
    				Note that data can be buffered,
    				callbacks may still be called after
    				the process ends.
    
    This race was recently exposed by [Vim v8.0.1073][vim], which avoids a
    redraw after statusline evaluation changes a highlight. Since vim-go
    modifies the goStatusLineColor highlight definition on async calls, the
    corresponding redraw acted as a delay, masking this data race.
    
    The solution to this problem is to process `guru` output in `close_cb`,
    which is called after all `callback` calls are complete.
    
    [vim]: vim/vim@ba2929b
    guns committed Sep 11, 2017
    Configuration menu
    Copy the full SHA
    17c0385 View commit details
    Browse the repository at this point in the history