[PATCH] D54829: [clangd] Cleanup: make diagnostics callbacks from TUScheduler non-racy
Ilya Biryukov via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 22 05:24:10 PST 2018
ilya-biryukov added inline comments.
================
Comment at: clangd/TUScheduler.cpp:424
if (*AST) {
OnUpdated((*AST)->getDiagnostics());
trace::Span Span("Running main AST callback");
----------------
sammccall wrote:
> as discussed offline, this doesn't guarantee we're not going to send OnUpdated calls for destroyed FileData objects. Intuitively because ShuttingDown may be set e.g. while building the AST, more subtly because atomic only prevents reordering with respect to other atomic operations.
>
> I believe we need to hold a lock:
> ```
> {
> mutex_lock Lock(SendDiagnosticsMu);
> if (SendDiagnostics)
> OnUpdated(...);
> }
> ```
> and set SendDiagnostics to false under the same lock.
Done. I've made the change before looking at the comment, so using `ReportDiagnostics` name instead of `SendDiagnostics`. Happy to change if you like the latter more.
================
Comment at: clangd/TUScheduler.cpp:426
trace::Span Span("Running main AST callback");
Callbacks.onMainAST(FileName, **AST);
DiagsWereReported = true;
----------------
sammccall wrote:
> This patch prevents the AST from being indexed after removal - for the same reasons, right?
>
> But we don't prevent onPreambleAST from being called...
> Not sure if it makes sense to fix this, but deserves at least a comment I think.
Added a comment.
Repository:
rCTE Clang Tools Extra
https://reviews.llvm.org/D54829
More information about the cfe-commits
mailing list