From f1c1f82e8bdd7f479c05caf1d2f2cccdbd29333d Mon Sep 17 00:00:00 2001 From: Pavel Krymets Date: Mon, 13 Aug 2018 10:32:39 -0700 Subject: [PATCH] Fix is_regular_file again (#1218) --- .../AspNetCore/AppOfflineApplication.cpp | 2 +- .../PollingAppOfflineApplication.cpp | 22 +++++++++---------- .../AspNetCore/PollingAppOfflineApplication.h | 2 +- 3 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/AspNetCoreModuleV2/AspNetCore/AppOfflineApplication.cpp b/src/AspNetCoreModuleV2/AspNetCore/AppOfflineApplication.cpp index 738199725e..49b2b07993 100644 --- a/src/AspNetCoreModuleV2/AspNetCore/AppOfflineApplication.cpp +++ b/src/AspNetCoreModuleV2/AspNetCore/AppOfflineApplication.cpp @@ -57,5 +57,5 @@ HRESULT AppOfflineApplication::OnAppOfflineFound() bool AppOfflineApplication::ShouldBeStarted(IHttpApplication& pApplication) { - return is_regular_file(GetAppOfflineLocation(pApplication)); + return FileExists(GetAppOfflineLocation(pApplication)); } diff --git a/src/AspNetCoreModuleV2/AspNetCore/PollingAppOfflineApplication.cpp b/src/AspNetCoreModuleV2/AspNetCore/PollingAppOfflineApplication.cpp index b448a89d7a..1270319e8b 100644 --- a/src/AspNetCoreModuleV2/AspNetCore/PollingAppOfflineApplication.cpp +++ b/src/AspNetCoreModuleV2/AspNetCore/PollingAppOfflineApplication.cpp @@ -28,20 +28,12 @@ PollingAppOfflineApplication::CheckAppOffline() SRWExclusiveLock lock(m_statusLock); if (ulCurrentTime - m_ulLastCheckTime > c_appOfflineRefreshIntervalMS) { - try + m_fAppOfflineFound = FileExists(m_appOfflineLocation); + if(m_fAppOfflineFound) { - m_fAppOfflineFound = is_regular_file(m_appOfflineLocation); - if(m_fAppOfflineFound) - { - LOG_IF_FAILED(OnAppOfflineFound()); - } - m_ulLastCheckTime = ulCurrentTime; - } - catch (...) - { - // is_regular_file might throw in very rare cases - OBSERVE_CAUGHT_EXCEPTION(); + LOG_IF_FAILED(OnAppOfflineFound()); } + m_ulLastCheckTime = ulCurrentTime; } } @@ -56,3 +48,9 @@ std::filesystem::path PollingAppOfflineApplication::GetAppOfflineLocation(IHttpA { return std::filesystem::path(pApplication.GetApplicationPhysicalPath()) / "app_offline.htm"; } + +bool PollingAppOfflineApplication::FileExists(const std::filesystem::path& path) +{ + std::error_code ec; + return is_regular_file(path, ec) || ec.value() == ERROR_SHARING_VIOLATION; +} diff --git a/src/AspNetCoreModuleV2/AspNetCore/PollingAppOfflineApplication.h b/src/AspNetCoreModuleV2/AspNetCore/PollingAppOfflineApplication.h index 95097bb3ac..e7ec367c17 100644 --- a/src/AspNetCoreModuleV2/AspNetCore/PollingAppOfflineApplication.h +++ b/src/AspNetCoreModuleV2/AspNetCore/PollingAppOfflineApplication.h @@ -32,7 +32,7 @@ public: protected: std::filesystem::path m_appOfflineLocation; static std::filesystem::path GetAppOfflineLocation(IHttpApplication& pApplication); - + static bool FileExists(const std::filesystem::path& path); private: static const int c_appOfflineRefreshIntervalMS = 200; std::string m_strAppOfflineContent;