From d199de2c80af654e80885202dd72f2c4cbe24729 Mon Sep 17 00:00:00 2001 From: Mike Harder Date: Fri, 3 Aug 2018 15:44:35 -0700 Subject: [PATCH 1/4] Revert "Replace "std::experimental::filesystem" with "std::filesystem" (#1153)" This reverts commit 2a761d635ccfe9f96370ba6b21439687a1c60acd. --- .../CommonLib/GlobalVersionUtility.cpp | 2 +- .../CommonLib/PollingAppOfflineApplication.cpp | 4 ++-- .../CommonLib/PollingAppOfflineApplication.h | 4 ++-- .../CommonLib/hostfxr_utility.cpp | 4 ++-- .../CommonLib/hostfxr_utility.h | 16 ++++++++-------- test/CommonLibTests/FileOutputManagerTests.cpp | 2 +- test/CommonLibTests/GlobalVersionTests.cpp | 2 +- test/CommonLibTests/Helpers.cpp | 4 ++-- test/CommonLibTests/Helpers.h | 4 ++-- 9 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/AspNetCoreModuleV2/CommonLib/GlobalVersionUtility.cpp b/src/AspNetCoreModuleV2/CommonLib/GlobalVersionUtility.cpp index 7cb185b0c3..b2c6b69871 100644 --- a/src/AspNetCoreModuleV2/CommonLib/GlobalVersionUtility.cpp +++ b/src/AspNetCoreModuleV2/CommonLib/GlobalVersionUtility.cpp @@ -6,7 +6,7 @@ #include "GlobalVersionUtility.h" -namespace fs = std::filesystem; +namespace fs = std::experimental::filesystem; // throws runtime error if no request handler versions are installed. // Throw invalid_argument if any argument is null diff --git a/src/AspNetCoreModuleV2/CommonLib/PollingAppOfflineApplication.cpp b/src/AspNetCoreModuleV2/CommonLib/PollingAppOfflineApplication.cpp index 2e552679e0..1468c7ee37 100644 --- a/src/AspNetCoreModuleV2/CommonLib/PollingAppOfflineApplication.cpp +++ b/src/AspNetCoreModuleV2/CommonLib/PollingAppOfflineApplication.cpp @@ -38,7 +38,7 @@ PollingAppOfflineApplication::AppOfflineExists() } -std::filesystem::path PollingAppOfflineApplication::GetAppOfflineLocation(IHttpApplication& pApplication) +std::experimental::filesystem::path PollingAppOfflineApplication::GetAppOfflineLocation(IHttpApplication& pApplication) { - return std::filesystem::path(pApplication.GetApplicationPhysicalPath()) / "app_offline.htm"; + return std::experimental::filesystem::path(pApplication.GetApplicationPhysicalPath()) / "app_offline.htm"; } diff --git a/src/AspNetCoreModuleV2/CommonLib/PollingAppOfflineApplication.h b/src/AspNetCoreModuleV2/CommonLib/PollingAppOfflineApplication.h index 516e72b79f..48e71f6641 100644 --- a/src/AspNetCoreModuleV2/CommonLib/PollingAppOfflineApplication.h +++ b/src/AspNetCoreModuleV2/CommonLib/PollingAppOfflineApplication.h @@ -30,8 +30,8 @@ public: void Stop(bool fServerInitiated) override { UNREFERENCED_PARAMETER(fServerInitiated); } protected: - std::filesystem::path m_appOfflineLocation; - static std::filesystem::path GetAppOfflineLocation(IHttpApplication& pApplication); + std::experimental::filesystem::path m_appOfflineLocation; + static std::experimental::filesystem::path GetAppOfflineLocation(IHttpApplication& pApplication); private: static const int c_appOfflineRefreshIntervalMS = 200; diff --git a/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.cpp b/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.cpp index 57644819be..ab827460bf 100644 --- a/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.cpp +++ b/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.cpp @@ -13,7 +13,7 @@ #include "HandleWrapper.h" #include "Environment.h" -namespace fs = std::filesystem; +namespace fs = std::experimental::filesystem; // // Runs a standalone appliction. @@ -98,7 +98,7 @@ HOSTFXR_UTILITY::GetStandaloneHostfxrParameters( } BOOL -HOSTFXR_UTILITY::IsDotnetExecutable(const std::filesystem::path & dotnetPath) +HOSTFXR_UTILITY::IsDotnetExecutable(const std::experimental::filesystem::path & dotnetPath) { auto name = dotnetPath.filename(); name.replace_extension(""); diff --git a/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.h b/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.h index 9e56fb4e28..1315865803 100644 --- a/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.h +++ b/src/AspNetCoreModuleV2/CommonLib/hostfxr_utility.h @@ -44,7 +44,7 @@ public: static BOOL IsDotnetExecutable( - _In_ const std::filesystem::path & dotnetPath + _In_ const std::experimental::filesystem::path & dotnetPath ); static @@ -74,25 +74,25 @@ public: ); static - std::optional + std::optional GetAbsolutePathToHostFxr( - _In_ const std::filesystem::path & dotnetPath, + _In_ const std::experimental::filesystem::path & dotnetPath, _In_ HANDLE hEventLog ); static - std::optional + std::optional GetAbsolutePathToDotnetFromProgramFiles(); static - std::optional + std::optional InvokeWhereToFindDotnet(); static - std::optional + std::optional GetAbsolutePathToDotnet( - _In_ const std::filesystem::path & applicationPath, - _In_ const std::filesystem::path & requestedPath + _In_ const std::experimental::filesystem::path & applicationPath, + _In_ const std::experimental::filesystem::path & requestedPath ); }; diff --git a/test/CommonLibTests/FileOutputManagerTests.cpp b/test/CommonLibTests/FileOutputManagerTests.cpp index ae1085408c..d0caa524a8 100644 --- a/test/CommonLibTests/FileOutputManagerTests.cpp +++ b/test/CommonLibTests/FileOutputManagerTests.cpp @@ -41,7 +41,7 @@ namespace FileOutManagerStartupTests wprintf(expected, out); } - for (auto & p : std::filesystem::directory_iterator(tempDirectory.path())) + for (auto & p : std::experimental::filesystem::directory_iterator(tempDirectory.path())) { std::wstring filename(p.path().filename()); ASSERT_EQ(filename.substr(0, fileNamePrefix.size()), fileNamePrefix); diff --git a/test/CommonLibTests/GlobalVersionTests.cpp b/test/CommonLibTests/GlobalVersionTests.cpp index f38c9361d2..9c74b6720e 100644 --- a/test/CommonLibTests/GlobalVersionTests.cpp +++ b/test/CommonLibTests/GlobalVersionTests.cpp @@ -7,7 +7,7 @@ namespace GlobalVersionTests { using ::testing::Test; - namespace fs = std::filesystem; + namespace fs = std::experimental::filesystem; class GlobalVersionTest : public Test { diff --git a/test/CommonLibTests/Helpers.cpp b/test/CommonLibTests/Helpers.cpp index ccca6cad5b..3e429a6665 100644 --- a/test/CommonLibTests/Helpers.cpp +++ b/test/CommonLibTests/Helpers.cpp @@ -28,7 +28,7 @@ TempDirectory::TempDirectory() RPC_CSTR szUuid = NULL; if (UuidToStringA(&uuid, &szUuid) == RPC_S_OK) { - m_path = std::filesystem::temp_directory_path() / reinterpret_cast(szUuid); + m_path = std::experimental::filesystem::temp_directory_path() / szUuid; RpcStringFreeA(&szUuid); return; } @@ -37,5 +37,5 @@ TempDirectory::TempDirectory() TempDirectory::~TempDirectory() { - std::filesystem::remove_all(m_path); + std::experimental::filesystem::remove_all(m_path); } diff --git a/test/CommonLibTests/Helpers.h b/test/CommonLibTests/Helpers.h index 67256966bb..657766dd43 100644 --- a/test/CommonLibTests/Helpers.h +++ b/test/CommonLibTests/Helpers.h @@ -18,11 +18,11 @@ public: ~TempDirectory(); - std::filesystem::path path() const + std::experimental::filesystem::path path() const { return m_path; } private: - std::filesystem::path m_path; + std::experimental::filesystem::path m_path; }; From 3f6288e14149e820c06048c3419404040ec8839d Mon Sep 17 00:00:00 2001 From: "ASP.NET CI" Date: Sun, 5 Aug 2018 19:16:42 +0000 Subject: [PATCH 2/4] Update dependencies.props [auto-updated: dependencies] --- build/dependencies.props | 52 ++++++++++++++++++++-------------------- korebuild-lock.txt | 4 ++-- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/build/dependencies.props b/build/dependencies.props index a181793011..d0e6d6faa4 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -4,38 +4,38 @@ 0.10.13 - 2.2.0-preview1-17099 - 2.2.0-preview1-34825 - 2.2.0-preview1-34825 - 2.2.0-preview1-34825 - 2.2.0-preview1-34825 - 2.2.0-preview1-34825 - 2.2.0-preview1-34825 - 2.2.0-preview1-34825 - 2.2.0-preview1-34825 - 2.2.0-preview1-34825 - 0.6.0-a-preview1-test-application-17108 - 2.2.0-preview1-34825 - 2.2.0-preview1-34825 - 2.2.0-preview1-34825 - 2.2.0-preview1-34825 + 2.2.0-preview1-20180731.1 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 + 0.6.0-preview1-34882 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 15.6.82 15.6.82 - 2.2.0-preview1-34825 - 2.2.0-preview1-34825 - 2.2.0-preview1-34825 - 2.2.0-preview1-34825 - 2.2.0-preview1-34825 - 2.2.0-preview1-34825 - 2.2.0-preview1-34825 - 2.2.0-preview1-34825 - 2.2.0-preview1-34825 - 2.2.0-preview1-34825 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 + 2.2.0-preview1-34882 2.0.9 2.1.2 2.2.0-preview1-26618-02 1.0.1 - 2.2.0-preview1-34825 + 2.2.0-preview1-34882 15.6.1 11.1.0 2.0.3 diff --git a/korebuild-lock.txt b/korebuild-lock.txt index 28cd6a5b03..b6efc7cfcb 100644 --- a/korebuild-lock.txt +++ b/korebuild-lock.txt @@ -1,2 +1,2 @@ -version:2.2.0-preview1-17102 -commithash:e7e2b5a97ca92cfc6acc4def534cb0901a6d1eb9 +version:2.2.0-preview1-20180731.1 +commithash:29fde58465439f4bb9df40830635ed758e063daf From c2f5101b7387140ce0bdc60ef534564b9b96c741 Mon Sep 17 00:00:00 2001 From: Pavel Krymets Date: Mon, 6 Aug 2018 09:41:56 -0700 Subject: [PATCH 3/4] Split managed application status and IApplication status (#1148) Split managed application status and IApplication status --- .../AspNetCore/ServerErrorApplication.h | 1 - .../AspNetCore/applicationinfo.cpp | 8 +-- .../AspNetCore/proxymodule.cpp | 10 +--- .../CommonLib/AppOfflineApplication.h | 1 + .../PollingAppOfflineApplication.cpp | 15 ++++-- .../CommonLib/PollingAppOfflineApplication.h | 6 +-- .../CommonLib/application.h | 33 ++++++++---- .../CommonLib/iapplication.h | 4 -- .../InProcessApplicationBase.cpp | 4 +- .../InProcessApplicationBase.h | 2 +- .../ShuttingDownApplication.h | 1 - .../StartupExceptionApplication.h | 1 - .../inprocessapplication.cpp | 52 ++++++++----------- .../inprocessapplication.h | 12 ++++- .../outprocessapplication.cpp | 14 ++--- .../outprocessapplication.h | 2 +- .../AppOfflineTrackingApplication.cpp | 8 +-- .../AppOfflineTrackingApplication.h | 9 ++-- 18 files changed, 86 insertions(+), 97 deletions(-) diff --git a/src/AspNetCoreModuleV2/AspNetCore/ServerErrorApplication.h b/src/AspNetCoreModuleV2/AspNetCore/ServerErrorApplication.h index 1872675656..2162075950 100644 --- a/src/AspNetCoreModuleV2/AspNetCore/ServerErrorApplication.h +++ b/src/AspNetCoreModuleV2/AspNetCore/ServerErrorApplication.h @@ -13,7 +13,6 @@ public: : m_HR(hr), PollingAppOfflineApplication(pApplication, PollingAppOfflineApplicationMode::StopWhenAdded) { - m_status = APPLICATION_STATUS::RUNNING; } ~ServerErrorApplication() = default; diff --git a/src/AspNetCoreModuleV2/AspNetCore/applicationinfo.cpp b/src/AspNetCoreModuleV2/AspNetCore/applicationinfo.cpp index 307d669dbf..8f94f23b08 100644 --- a/src/AspNetCoreModuleV2/AspNetCore/applicationinfo.cpp +++ b/src/AspNetCoreModuleV2/AspNetCore/applicationinfo.cpp @@ -54,7 +54,7 @@ APPLICATION_INFO::GetOrCreateApplication( ) { HRESULT hr = S_OK; - + SRWExclusiveLock lock(m_applicationLock); auto& httpApplication = *pHttpContext->GetApplication(); @@ -72,7 +72,7 @@ APPLICATION_INFO::GetOrCreateApplication( else { // another thread created the application - FINISHED(S_OK); + FINISHED(S_OK); } } @@ -124,7 +124,7 @@ Finished: if (m_pApplication) { - pApplication = ReferenceApplication(m_pApplication.get()); + pApplication = ReferenceApplication(m_pApplication.get()); } return hr; @@ -410,7 +410,7 @@ APPLICATION_INFO::RecycleApplication() } -DWORD WINAPI +DWORD WINAPI APPLICATION_INFO::DoRecycleApplication( LPVOID lpParam) { diff --git a/src/AspNetCoreModuleV2/AspNetCore/proxymodule.cpp b/src/AspNetCoreModuleV2/AspNetCore/proxymodule.cpp index 0ed100fd47..1f0ed72db1 100644 --- a/src/AspNetCoreModuleV2/AspNetCore/proxymodule.cpp +++ b/src/AspNetCoreModuleV2/AspNetCore/proxymodule.cpp @@ -95,20 +95,12 @@ ASPNET_CORE_PROXY_MODULE::OnExecuteRequestHandler( // the error should already been logged to window event log for the first request FINISHED(E_APPLICATION_ACTIVATION_EXEC_FAILURE); } - + DBG_ASSERT(pHttpContext); std::unique_ptr pApplication; FINISHED_IF_FAILED(m_pApplicationInfo->GetOrCreateApplication(pHttpContext, pApplication)); - // We allow RECYCLED application to serve pages - if (pApplication->QueryStatus() != APPLICATION_STATUS::RUNNING && - pApplication->QueryStatus() != APPLICATION_STATUS::STARTING && - pApplication->QueryStatus() != APPLICATION_STATUS::RECYCLED) - { - FINISHED(HRESULT_FROM_WIN32(ERROR_SERVER_DISABLED)); - } - IREQUEST_HANDLER* pHandler; // Create RequestHandler and process the request FINISHED_IF_FAILED(pApplication->CreateHandler(pHttpContext, &pHandler)); diff --git a/src/AspNetCoreModuleV2/CommonLib/AppOfflineApplication.h b/src/AspNetCoreModuleV2/CommonLib/AppOfflineApplication.h index f6ec00cab0..71f79e5294 100644 --- a/src/AspNetCoreModuleV2/CommonLib/AppOfflineApplication.h +++ b/src/AspNetCoreModuleV2/CommonLib/AppOfflineApplication.h @@ -13,6 +13,7 @@ public: AppOfflineApplication(IHttpApplication& pApplication) : PollingAppOfflineApplication(pApplication, PollingAppOfflineApplicationMode::StopWhenRemoved) { + CheckAppOffline(); } HRESULT CreateHandler(IHttpContext* pHttpContext, IREQUEST_HANDLER** pRequestHandler) override; diff --git a/src/AspNetCoreModuleV2/CommonLib/PollingAppOfflineApplication.cpp b/src/AspNetCoreModuleV2/CommonLib/PollingAppOfflineApplication.cpp index 1468c7ee37..08491b0d76 100644 --- a/src/AspNetCoreModuleV2/CommonLib/PollingAppOfflineApplication.cpp +++ b/src/AspNetCoreModuleV2/CommonLib/PollingAppOfflineApplication.cpp @@ -9,11 +9,12 @@ APPLICATION_STATUS PollingAppOfflineApplication::QueryStatus() { - return (AppOfflineExists() == (m_mode == StopWhenRemoved)) ? APPLICATION_STATUS::RUNNING : APPLICATION_STATUS::RECYCLED; + CheckAppOffline(); + return APPLICATION::QueryStatus(); } -bool -PollingAppOfflineApplication::AppOfflineExists() +void +PollingAppOfflineApplication::CheckAppOffline() { const auto ulCurrentTime = GetTickCount64(); // @@ -29,12 +30,16 @@ PollingAppOfflineApplication::AppOfflineExists() m_fAppOfflineFound = is_regular_file(m_appOfflineLocation); if(m_fAppOfflineFound) { - LOG_IF_FAILED(OnAppOfflineFound()); + LOG_IF_FAILED(OnAppOfflineFound()); } m_ulLastCheckTime = ulCurrentTime; } } - return m_fAppOfflineFound; + + if (m_fAppOfflineFound != (m_mode == StopWhenRemoved)) + { + Stop(/* fServerInitiated */ false); + } } diff --git a/src/AspNetCoreModuleV2/CommonLib/PollingAppOfflineApplication.h b/src/AspNetCoreModuleV2/CommonLib/PollingAppOfflineApplication.h index 48e71f6641..98d32ae8d3 100644 --- a/src/AspNetCoreModuleV2/CommonLib/PollingAppOfflineApplication.h +++ b/src/AspNetCoreModuleV2/CommonLib/PollingAppOfflineApplication.h @@ -25,9 +25,9 @@ public: } APPLICATION_STATUS QueryStatus() override; - bool AppOfflineExists(); + void CheckAppOffline(); virtual HRESULT OnAppOfflineFound() = 0; - void Stop(bool fServerInitiated) override { UNREFERENCED_PARAMETER(fServerInitiated); } + void StopInternal(bool fServerInitiated) override { UNREFERENCED_PARAMETER(fServerInitiated); } protected: std::experimental::filesystem::path m_appOfflineLocation; @@ -36,7 +36,7 @@ protected: private: static const int c_appOfflineRefreshIntervalMS = 200; std::string m_strAppOfflineContent; - ULONGLONG m_ulLastCheckTime; + ULONGLONG m_ulLastCheckTime; bool m_fAppOfflineFound; SRWLOCK m_statusLock {}; PollingAppOfflineApplicationMode m_mode; diff --git a/src/AspNetCoreModuleV2/CommonLib/application.h b/src/AspNetCoreModuleV2/CommonLib/application.h index 1bc3d02f37..1167602327 100644 --- a/src/AspNetCoreModuleV2/CommonLib/application.h +++ b/src/AspNetCoreModuleV2/CommonLib/application.h @@ -7,11 +7,10 @@ #include "exceptions.h" #include "utility.h" #include "ntassert.h" - +#include "SRWExclusiveLock.h" class APPLICATION : public IAPPLICATION { - public: // Non-copyable APPLICATION(const APPLICATION&) = delete; @@ -20,24 +19,38 @@ public: APPLICATION_STATUS QueryStatus() override { - return m_status; + return m_fStopCalled ? APPLICATION_STATUS::RECYCLED : APPLICATION_STATUS::RUNNING; } APPLICATION() - : m_cRefs(1) + : m_fStopCalled(false), + m_cRefs(1) { InitializeSRWLock(&m_stateLock); } - + VOID Stop(bool fServerInitiated) override { - UNREFERENCED_PARAMETER(fServerInitiated); + SRWExclusiveLock stopLock(m_stateLock); + + if (m_fStopCalled) + { + return; + } m_fStopCalled = true; + + StopInternal(fServerInitiated); + } + + virtual + VOID + StopInternal(bool fServerInitiated) + { + UNREFERENCED_PARAMETER(fServerInitiated); } - VOID ReferenceApplication() override @@ -59,11 +72,9 @@ public: } protected: - volatile APPLICATION_STATUS m_status = APPLICATION_STATUS::UNKNOWN; SRWLOCK m_stateLock; - bool m_fStopCalled; + bool m_fStopCalled; private: - - mutable LONG m_cRefs; + mutable LONG m_cRefs; }; diff --git a/src/AspNetCoreModuleV2/CommonLib/iapplication.h b/src/AspNetCoreModuleV2/CommonLib/iapplication.h index cdfd17ec03..1f69a39bbb 100644 --- a/src/AspNetCoreModuleV2/CommonLib/iapplication.h +++ b/src/AspNetCoreModuleV2/CommonLib/iapplication.h @@ -8,12 +8,8 @@ enum APPLICATION_STATUS { - UNKNOWN = 0, - STARTING, RUNNING, - SHUTDOWN, RECYCLED, - FAIL }; struct APPLICATION_PARAMETER diff --git a/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessApplicationBase.cpp b/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessApplicationBase.cpp index 3152b75cca..0abdc42025 100644 --- a/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessApplicationBase.cpp +++ b/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessApplicationBase.cpp @@ -15,9 +15,9 @@ InProcessApplicationBase::InProcessApplicationBase( } VOID -InProcessApplicationBase::Stop(bool fServerInitiated) +InProcessApplicationBase::StopInternal(bool fServerInitiated) { - AppOfflineTrackingApplication::Stop(fServerInitiated); + AppOfflineTrackingApplication::StopInternal(fServerInitiated); // Stop was initiated by server no need to do anything, server would stop on it's own if (fServerInitiated) diff --git a/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessApplicationBase.h b/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessApplicationBase.h index 5df37d34b6..bb343725f5 100644 --- a/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessApplicationBase.h +++ b/src/AspNetCoreModuleV2/InProcessRequestHandler/InProcessApplicationBase.h @@ -18,7 +18,7 @@ public: ~InProcessApplicationBase() = default; - VOID Stop(bool fServerInitiated) override; + VOID StopInternal(bool fServerInitiated) override; protected: BOOL m_fRecycleCalled; diff --git a/src/AspNetCoreModuleV2/InProcessRequestHandler/ShuttingDownApplication.h b/src/AspNetCoreModuleV2/InProcessRequestHandler/ShuttingDownApplication.h index 4528a3f2b4..6195877234 100644 --- a/src/AspNetCoreModuleV2/InProcessRequestHandler/ShuttingDownApplication.h +++ b/src/AspNetCoreModuleV2/InProcessRequestHandler/ShuttingDownApplication.h @@ -32,7 +32,6 @@ public: ShuttingDownApplication(IHttpServer& pHttpServer, IHttpApplication& pHttpApplication) : InProcessApplicationBase(pHttpServer, pHttpApplication) { - m_status = APPLICATION_STATUS::RUNNING; } ~ShuttingDownApplication() = default; diff --git a/src/AspNetCoreModuleV2/InProcessRequestHandler/StartupExceptionApplication.h b/src/AspNetCoreModuleV2/InProcessRequestHandler/StartupExceptionApplication.h index 14d26bf3a4..369c57adfe 100644 --- a/src/AspNetCoreModuleV2/InProcessRequestHandler/StartupExceptionApplication.h +++ b/src/AspNetCoreModuleV2/InProcessRequestHandler/StartupExceptionApplication.h @@ -16,7 +16,6 @@ public: : m_disableLogs(disableLogs), InProcessApplicationBase(pServer, pApplication) { - m_status = APPLICATION_STATUS::RUNNING; html500Page = std::string(" \ \ \ diff --git a/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessapplication.cpp b/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessapplication.cpp index 575d9180e4..7207f745c3 100644 --- a/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessapplication.cpp +++ b/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessapplication.cpp @@ -23,7 +23,6 @@ IN_PROCESS_APPLICATION::IN_PROCESS_APPLICATION( APPLICATION_PARAMETER *pParameters, DWORD nParameters) : InProcessApplicationBase(pHttpServer, pApplication), - m_pHttpServer(pHttpServer), m_ProcessExitCode(0), m_fBlockCallbacksIntoManaged(FALSE), m_fShutdownCalledFromNative(FALSE), @@ -40,7 +39,7 @@ IN_PROCESS_APPLICATION::IN_PROCESS_APPLICATION( } } - m_status = APPLICATION_STATUS::STARTING; + m_status = MANAGED_APPLICATION_STATUS::STARTING; } IN_PROCESS_APPLICATION::~IN_PROCESS_APPLICATION() @@ -63,22 +62,13 @@ IN_PROCESS_APPLICATION::DoShutDown( __override VOID -IN_PROCESS_APPLICATION::Stop(bool fServerInitiated) +IN_PROCESS_APPLICATION::StopInternal(bool fServerInitiated) { UNREFERENCED_PARAMETER(fServerInitiated); HRESULT hr = S_OK; CHandle hThread; DWORD dwThreadStatus = 0; - SRWExclusiveLock stopLock(m_stateLock); - - if (m_fStopCalled) - { - return; - } - - AppOfflineTrackingApplication::Stop(fServerInitiated); - DWORD dwTimeout = m_pConfig->QueryShutdownTimeLimitInMS(); if (IsDebuggerPresent()) @@ -137,7 +127,7 @@ Finished: m_pConfig->QueryConfigPath()->QueryStr()); } - InProcessApplicationBase::Stop(fServerInitiated); + InProcessApplicationBase::StopInternal(fServerInitiated); } VOID @@ -152,16 +142,16 @@ IN_PROCESS_APPLICATION::ShutDownInternal() } if (m_fShutdownCalledFromNative || - m_status == APPLICATION_STATUS::STARTING || - m_status == APPLICATION_STATUS::FAIL) + m_status == MANAGED_APPLICATION_STATUS::STARTING || + m_status == MANAGED_APPLICATION_STATUS::FAIL) { return; } { if (m_fShutdownCalledFromNative || - m_status == APPLICATION_STATUS::STARTING || - m_status == APPLICATION_STATUS::FAIL) + m_status == MANAGED_APPLICATION_STATUS::STARTING || + m_status == MANAGED_APPLICATION_STATUS::FAIL) { return; } @@ -171,7 +161,7 @@ IN_PROCESS_APPLICATION::ShutDownInternal() // managed. We still need to wait on main exiting no matter what. m_fShutdownCalledFromNative // is used for detecting redundant calls and blocking more requests to OnExecuteRequestHandler. m_fShutdownCalledFromNative = TRUE; - m_status = APPLICATION_STATUS::RECYCLED; + m_status = MANAGED_APPLICATION_STATUS::SHUTDOWN; if (!m_fShutdownCalledFromManaged) { @@ -249,18 +239,18 @@ IN_PROCESS_APPLICATION::LoadManagedApplication HRESULT hr = S_OK; DWORD dwTimeout; DWORD dwResult; - + ReferenceApplication(); - if (m_status != APPLICATION_STATUS::STARTING) + if (m_status != MANAGED_APPLICATION_STATUS::STARTING) { // Core CLR has already been loaded. // Cannot load more than once even there was a failure - if (m_status == APPLICATION_STATUS::FAIL) + if (m_status == MANAGED_APPLICATION_STATUS::FAIL) { hr = E_APPLICATION_ACTIVATION_EXEC_FAILURE; } - else if (m_status == APPLICATION_STATUS::SHUTDOWN) + else if (m_status == MANAGED_APPLICATION_STATUS::SHUTDOWN) { hr = HRESULT_FROM_WIN32(ERROR_SHUTDOWN_IS_SCHEDULED); } @@ -289,13 +279,13 @@ IN_PROCESS_APPLICATION::LoadManagedApplication LOG_IF_FAILED(m_pLoggerProvider->Start()); } - if (m_status != APPLICATION_STATUS::STARTING) + if (m_status != MANAGED_APPLICATION_STATUS::STARTING) { - if (m_status == APPLICATION_STATUS::FAIL) + if (m_status == MANAGED_APPLICATION_STATUS::FAIL) { hr = E_APPLICATION_ACTIVATION_EXEC_FAILURE; } - else if (m_status == APPLICATION_STATUS::SHUTDOWN) + else if (m_status == MANAGED_APPLICATION_STATUS::SHUTDOWN) { hr = HRESULT_FROM_WIN32(ERROR_SHUTDOWN_IS_SCHEDULED); } @@ -363,13 +353,13 @@ IN_PROCESS_APPLICATION::LoadManagedApplication goto Finished; } - m_status = APPLICATION_STATUS::RUNNING; + m_status = MANAGED_APPLICATION_STATUS::RUNNING_MANAGED; } Finished: if (FAILED(hr)) { - m_status = APPLICATION_STATUS::FAIL; + m_status = MANAGED_APPLICATION_STATUS::FAIL; UTILITY::LogEventF(g_hEventLog, EVENTLOG_ERROR_TYPE, @@ -444,7 +434,7 @@ IN_PROCESS_APPLICATION::ExecuteApplication( hostfxr_main_fn pProc; std::unique_ptr hostFxrOptions = NULL; - DBG_ASSERT(m_status == APPLICATION_STATUS::STARTING); + DBG_ASSERT(m_status == MANAGED_APPLICATION_STATUS::STARTING); pProc = s_fMainCallback; if (pProc == nullptr) @@ -502,7 +492,7 @@ Finished: // Don't bother locking here as there will always be a race between receiving a native shutdown // notification and unexpected managed exit. // - m_status = APPLICATION_STATUS::SHUTDOWN; + m_status = MANAGED_APPLICATION_STATUS::SHUTDOWN; m_fShutdownCalledFromManaged = TRUE; FreeLibrary(hModule); m_pLoggerProvider->Stop(); @@ -575,12 +565,12 @@ IN_PROCESS_APPLICATION::RunDotnetApplication(DWORD argc, CONST PCWSTR* argv, hos { hr = HRESULT_FROM_WIN32(GetLastError()); } - + LOG_INFOF("Managed application exited with code %d", m_ProcessExitCode); } __except(GetExceptionCode() != 0) { - + LOG_INFOF("Managed threw an exception %d", GetExceptionCode()); hr = HRESULT_FROM_WIN32(GetLastError()); } diff --git a/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessapplication.h b/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessapplication.h index a18d85a617..8993d7fc8e 100644 --- a/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessapplication.h +++ b/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessapplication.h @@ -26,7 +26,7 @@ public: __override VOID - Stop(bool fServerInitiated) override; + StopInternal(bool fServerInitiated) override; VOID SetCallbackHandles( @@ -111,7 +111,14 @@ public: private: - IHttpServer & m_pHttpServer; + enum MANAGED_APPLICATION_STATUS + { + UNKNOWN = 0, + STARTING, + RUNNING_MANAGED, + SHUTDOWN, + FAIL + }; // Thread executing the .NET Core process HANDLE m_hThread; @@ -138,6 +145,7 @@ private: volatile BOOL m_fShutdownCalledFromNative; volatile BOOL m_fShutdownCalledFromManaged; BOOL m_fInitialized; + MANAGED_APPLICATION_STATUS m_status; std::unique_ptr m_pConfig; static IN_PROCESS_APPLICATION* s_Application; diff --git a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outprocessapplication.cpp b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outprocessapplication.cpp index 41835538a9..564adea383 100644 --- a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outprocessapplication.cpp +++ b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outprocessapplication.cpp @@ -12,7 +12,6 @@ OUT_OF_PROCESS_APPLICATION::OUT_OF_PROCESS_APPLICATION( m_fWebSocketSupported(WEBSOCKET_STATUS::WEBSOCKET_UNKNOWN), m_pConfig(std::move(pConfig)) { - m_status = APPLICATION_STATUS::RUNNING; m_pProcessManager = NULL; } @@ -62,16 +61,9 @@ OUT_OF_PROCESS_APPLICATION::GetProcess( __override VOID -OUT_OF_PROCESS_APPLICATION::Stop(bool fServerInitiated) -{ - SRWExclusiveLock lock(m_stateLock); - - if (m_fStopCalled) - { - return; - } - - AppOfflineTrackingApplication::Stop(fServerInitiated); +OUT_OF_PROCESS_APPLICATION::StopInternal(bool fServerInitiated) +{ + AppOfflineTrackingApplication::StopInternal(fServerInitiated); if (m_pProcessManager != NULL) { diff --git a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outprocessapplication.h b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outprocessapplication.h index 6ac813f6a7..43eca31f95 100644 --- a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outprocessapplication.h +++ b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outprocessapplication.h @@ -32,7 +32,7 @@ public: __override VOID - Stop(bool fServerInitiated) + StopInternal(bool fServerInitiated) override; __override diff --git a/src/AspNetCoreModuleV2/RequestHandlerLib/AppOfflineTrackingApplication.cpp b/src/AspNetCoreModuleV2/RequestHandlerLib/AppOfflineTrackingApplication.cpp index ed465eb7c1..47a92d3daa 100644 --- a/src/AspNetCoreModuleV2/RequestHandlerLib/AppOfflineTrackingApplication.cpp +++ b/src/AspNetCoreModuleV2/RequestHandlerLib/AppOfflineTrackingApplication.cpp @@ -6,8 +6,6 @@ #include "EventLog.h" #include "exceptions.h" -extern HANDLE g_hEventLog; - HRESULT AppOfflineTrackingApplication::StartMonitoringAppOffline() { LOG_INFOF("Starting app_offline monitoring in application %S", m_applicationPath.c_str()); @@ -26,11 +24,9 @@ HRESULT AppOfflineTrackingApplication::StartMonitoringAppOffline() return hr; } -void AppOfflineTrackingApplication::Stop(bool fServerInitiated) +void AppOfflineTrackingApplication::StopInternal(bool fServerInitiated) { - APPLICATION::Stop(fServerInitiated); - - m_status = APPLICATION_STATUS::RECYCLED; + APPLICATION::StopInternal(fServerInitiated); if (m_fileWatcher) { diff --git a/src/AspNetCoreModuleV2/RequestHandlerLib/AppOfflineTrackingApplication.h b/src/AspNetCoreModuleV2/RequestHandlerLib/AppOfflineTrackingApplication.h index f104370c72..f2ce7a5c20 100644 --- a/src/AspNetCoreModuleV2/RequestHandlerLib/AppOfflineTrackingApplication.h +++ b/src/AspNetCoreModuleV2/RequestHandlerLib/AppOfflineTrackingApplication.h @@ -12,7 +12,8 @@ class AppOfflineTrackingApplication: public APPLICATION { public: AppOfflineTrackingApplication(const IHttpApplication& application) - : m_applicationPath(application.GetApplicationPhysicalPath()), + : APPLICATION(), + m_applicationPath(application.GetApplicationPhysicalPath()), m_fileWatcher(nullptr), m_fAppOfflineProcessed(false) { @@ -23,15 +24,15 @@ public: if (m_fileWatcher) { m_fileWatcher->StopMonitor(); - } + } }; HRESULT StartMonitoringAppOffline(); VOID - Stop(bool fServerInitiated) override; - + StopInternal(bool fServerInitiated) override; + virtual VOID OnAppOffline(); From 959771e73a0a1f69919361ec03fc2bc723a94438 Mon Sep 17 00:00:00 2001 From: Pavel Krymets Date: Mon, 6 Aug 2018 09:46:40 -0700 Subject: [PATCH 4/4] Fix incrementality checks for test projects (#1145) --- build/testsite.props | 2 +- .../Microsoft.AspNetCore.Server.IIS.csproj | 15 +++++++-------- ...spNetCore.Server.IntegrationTesting.IIS.csproj | 13 +++++++++++++ 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/build/testsite.props b/build/testsite.props index d412ac84b3..9a9e2cdf76 100644 --- a/build/testsite.props +++ b/build/testsite.props @@ -37,7 +37,7 @@ $(AspNetCoreModuleV1ShimDll) $(AspNetCoreModuleV2ShimDll) - $(NativePlatform)\aspnetcorev2_inprocess.dll + aspnetcorev2_inprocess.dll $(userprofile)\.dotnet\$(NativePlatform)\dotnet.exe diff --git a/src/Microsoft.AspNetCore.Server.IIS/Microsoft.AspNetCore.Server.IIS.csproj b/src/Microsoft.AspNetCore.Server.IIS/Microsoft.AspNetCore.Server.IIS.csproj index 0580c14e85..f9c6fbbd6f 100644 --- a/src/Microsoft.AspNetCore.Server.IIS/Microsoft.AspNetCore.Server.IIS.csproj +++ b/src/Microsoft.AspNetCore.Server.IIS/Microsoft.AspNetCore.Server.IIS.csproj @@ -10,6 +10,7 @@ true true netcoreapp2.2 + True @@ -25,6 +26,12 @@ + + + False + + + @@ -43,14 +50,6 @@ - - - - diff --git a/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj b/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj index c13eb6214b..3678730c7e 100644 --- a/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj +++ b/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/Microsoft.AspNetCore.Server.IntegrationTesting.IIS.csproj @@ -7,6 +7,7 @@ $(NoWarn);CS1591 true aspnetcore;iis + True @@ -21,6 +22,18 @@ + + + False + + + False + + + False + + +