cierpuchaw added inline comments.

================
Comment at: clangd/DocumentStore.h:42
   /// Delete a document from the store.
-  void removeDocument(StringRef Uri) { Docs.erase(Uri); }
+  void removeDocument(StringRef Uri) { Docs.erase(Uri);
+    for (const auto &Listener : Listeners)
----------------
bkramer wrote:
> klimek wrote:
> > krasimir wrote:
> > > cierpuchaw wrote:
> > > > cierpuchaw wrote:
> > > > > Shouldn't this be called under a lock_guard?
> > > > I should've reworded my comment before submitting it. By 'this' I'm 
> > > > referring to the 'Docs.erase()' part, not the whole function.
> > > > 
> > > Even under a guard, it may potentially still be unsafe since workers may 
> > > operate on erased/modified StringRef-s.
> > That depends on the guarantees made, and when we create copies :)
> Added guard.
'Docs.erase(Uri);' is still outside the critical section. It's easy to miss 
because of its placement directly after '{'.


https://reviews.llvm.org/D29886



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to