mgorny added inline comments.

================
Comment at: clang/lib/DirectoryWatcher/DirectoryWatcher-linux.inc.h:135
+        if (!statusOpt.hasValue())
+          K = DirectoryWatcher::EventKind::Removed;
+      }
----------------
akyrtzi wrote:
> mgorny wrote:
> > akyrtzi wrote:
> > > mgorny wrote:
> > > > jkorous wrote:
> > > > > mgorny wrote:
> > > > > > Why? I suppose this deserves a comment.
> > > > > I'll add this comment:
> > > > > 
> > > > > // The file might have been removed just after we received the event.
> > > > Wouldn't that cause removals to be reported twice?
> > > Not quite sure if it can happen in practice but I'd suggest to accept 
> > > this as potential occurrence and add it to documentation ("a 'removed' 
> > > event may be reported twice). I think it is better to handle a definite 
> > > "fact" (the file doesn't exist) than ignore it and assume the 'removed' 
> > > event will eventually show up, or try to eliminate the double reporting 
> > > which would over-complicate the implementation.
> > > 
> > > After all, if inotify() is not 100% reliable then there's already the 
> > > possibility that you'll get a 'removed' event for a file that was not 
> > > reported as 'added' before.
> > I see this as a partial workaround for race condition. You 'fix' it if 
> > removal happens between inotify reporting the event and you returning it. 
> > You don't if removal happens after you push it to events. Therefore, the 
> > caller still needs to account for 'added' event being obsolete. I don't 
> > really see a purpose in trying to workaround the problem partially here if 
> > the caller still needs to account for it. Effectively, you're replacing one 
> > normal case and one corner case with one normal case and two corner cases.
> I was mainly pointing out that the client already has to be prepared for a 
> 'removed' event that does not have an associated 'added' event, regardless of 
> what this code is doing. Therefore a potential double 'removed' event doesn't 
> add complexity to the client.
> 
> Could you clarify how the code should handle the inability to get the mod 
> time ? Should it ignore the event ?
Given the code is supposed to wrap filesystem notification layer, I'd say it 
should pass the events unmodified and not double-guess what the client expects. 
The client needs to be prepared for non-atomicity of this anyway.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D58418/new/

https://reviews.llvm.org/D58418



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

Reply via email to