krasimir 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)
----------------
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.


================
Comment at: clangd/DocumentStore.h:51
     auto I = Docs.find(Uri);
     return I == Docs.end() ? StringRef("") : StringRef(I->second);
   }
----------------
StringRef doesn't own the underlying data, right? What if I erase it in the 
meantime?


================
Comment at: clangd/DocumentStore.h:63
+      AllDocs.emplace_back(P.first(), P.second);
+    return AllDocs;
+  }
----------------
Same thing, shouldn't these be strings?


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