kousikk added a comment.

In D68193#1692293 <https://reviews.llvm.org/D68193#1692293>, @arphaman wrote:

> I don't quite understand the specific issue you're hitting, as it sounds that 
> the logic right now should handle it:
>
> > It seems that when the CachingFileSystem is first given a file to open that 
> > is actually a directory, it incorrectly
> > caches that path to be errenous and throws an error when subsequently a 
> > directory open >call is made for the same
> > path.
>
> In this case, right now (without this patch) `createFileEntry` will return 
> `std::errc::is_a_directory`. 
> `DependencyScanningWorkerFilesystem::openFileForRead` will then invalidate 
> the entry in the global cache:


`createFileEntry` does return std::errc::is_a_directory, but the cache entry is 
NOT invalidated from the global cache. It stays on in the global cache, as an 
error entry for that directory path. I think the current version is slightly 
better because the first time we see a path, we determine if its a file / 
directory and store the appropriate CachedFileSystemEntry in the global cache.

> 
> 
>   if (CacheEntry.getError() == std::errc::is_a_directory) {
>       // Reset the CacheEntry to avoid setting an error entry in the
>       // cache for the given directory path.
>       CacheEntry = CachedFileSystemEntry();
>    
> 
> Which means that when the call to `stat` happens, it should be fine as the 
> global cache doesn't have a valid entry, so it will be able to recognize a 
> directory and won't return an error.
> 
> Does this not happen in your case?

I think the difference is the global cache does have the entry (but its set to 
an Error object). The test-case I added should currently fail without the 
changes in this CL.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D68193



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

Reply via email to