Avoid race condition while starting coqtail #366
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
As described in #364, now that
coqtail#start
callsstart
asynchronously, calling a command duringCoqStart
(e.g.,:CoqToLine | CoqToLine
) can cause a race that often results in a fatal error. The solution implemented here is to havecoqtail#start
check if Coqtail is initialized (s:initted()
) but not yet running (s:running()
) and, if so, drop the command with a warning. The only difference betweens:initted()
ands:running()
is whetherb:coqtail_started
is set, so I believe this should ensure that no other commands can run untilcoqtail#after_startCB
completes. Since I expect it should be pretty rare in practice for someone to try to run commands beforeCoqStart
completes, I think just ignoring them is reasonable. This should not affect commands that are called beforeCoqStart
, those will still be queued to run bycoqtail#after_startCB
.Fixes #364.