dotnet/runtime

Ensure FileStatus' Unix exception throwing behavior matches Windows

Open

#31.141 aberto em 10 de out. de 2019

Ver no GitHub
 (8 comments) (9 reactions) (0 assignees)C# (5.445 forks)batch import
area-System.IObacklog-cleanup-candidatehelp wantedno-recent-activity

Métricas do repositório

Stars
 (17.886 stars)
Métricas de merge de PR
 (Mesclagem média 12d 11h) (661 fundiu PRs em 30d)

Description

Initially reported by @davidfowl and discussed via email with @JeremyKuhne : we need to make sure Unix matches Windows when it comes to capturing and throwing exceptions.

David got this callstack when the Docker container got disconnected:

Unhandled exception. Unhandled exception. System.IO.IOException: Input/output error
   at System.IO.FileStatus.EnsureStatInitialized(ReadOnlySpan`1 path, Boolean continueOnError)
   at System.IO.FileStatus.GetLastWriteTime(ReadOnlySpan`1 path, Boolean continueOnError)
   at Microsoft.Extensions.FileProviders.Physical.PollingFileChangeToken.GetLastWriteTimeUtc()
   at Microsoft.Extensions.FileProviders.Physical.PollingFileChangeToken.get_HasChanged()
   at Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher.RaiseChangeEvents(Object state)
   at System.Threading.TimerQueueTimer.CallCallback(Boolean isThreadPool)
   at System.Threading.TimerQueueTimer.Fire(Boolean isThreadPool)
   at System.Threading.TimerQueue.FireNextTimers()System.IO.IOException: Input/output error
   at System.IO.FileStatus.EnsureStatInitialized(ReadOnlySpan`1 path, Boolean continueOnError)
   at System.IO.FileStatus.GetLastWriteTime(ReadOnlySpan`1 path, Boolean continueOnError)
   at Microsoft.Extensions.FileProviders.Physical.PollingFileChangeToken.GetLastWriteTimeUtc()
   at Microsoft.Extensions.FileProviders.Physical.PollingFileChangeToken.get_HasChanged()
   at Microsoft.Extensions.FileProviders.Physical.PhysicalFilesWatcher.RaiseChangeEvents(Object state)
   at System.Threading.TimerQueueTimer.CallCallback(Boolean isThreadPool)
   at System.Threading.TimerQueueTimer.Fire(Boolean isThreadPool)
   at System.Threading.ThreadPoolWorkQueue.Dispatch()

Guia do colaborador