From a1e8b3a9af84a8e94a90585754ff4da6c379ad05 Mon Sep 17 00:00:00 2001 From: Justin Kotalik Date: Fri, 17 Aug 2018 16:29:30 -0700 Subject: [PATCH] Free environment variable table in inprocess application (#1254) --- .../inprocessapplication.cpp | 29 +++++++------------ .../environmentvariablehash.h | 10 +++++++ .../IISDeployer.cs | 2 +- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessapplication.cpp b/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessapplication.cpp index b9746ff204..352ec7b093 100644 --- a/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessapplication.cpp +++ b/src/AspNetCoreModuleV2/InProcessRequestHandler/inprocessapplication.cpp @@ -259,7 +259,6 @@ IN_PROCESS_APPLICATION::LoadManagedApplication // Set up stdout redirect SRWExclusiveLock lock(m_stateLock); - if (m_pLoggerProvider == NULL) { hr = LoggingHelpers::CreateLoggingProvider( @@ -394,28 +393,22 @@ IN_PROCESS_APPLICATION::SetEnvironementVariablesOnWorkerProcess( { HRESULT hr = S_OK; ENVIRONMENT_VAR_HASH* pHashTable = NULL; - if (FAILED(hr = ENVIRONMENT_VAR_HELPERS::InitEnvironmentVariablesTable( + std::unique_ptr table; + RETURN_IF_FAILED(hr = ENVIRONMENT_VAR_HELPERS::InitEnvironmentVariablesTable( m_pConfig->QueryEnvironmentVariables(), m_pConfig->QueryWindowsAuthEnabled(), m_pConfig->QueryBasicAuthEnabled(), m_pConfig->QueryAnonymousAuthEnabled(), - &pHashTable))) - { - goto Finished; - } + &pHashTable)); - pHashTable->Apply(ENVIRONMENT_VAR_HELPERS::AppendEnvironmentVariables, &hr); - if (FAILED(hr)) - { - goto Finished; - } - pHashTable->Apply(ENVIRONMENT_VAR_HELPERS::SetEnvironmentVariables, &hr); - if (FAILED(hr)) - { - goto Finished; - } -Finished: - return hr; + table.reset(pHashTable); + + table->Apply(ENVIRONMENT_VAR_HELPERS::AppendEnvironmentVariables, &hr); + RETURN_IF_FAILED(hr); + + table->Apply(ENVIRONMENT_VAR_HELPERS::SetEnvironmentVariables, &hr); + RETURN_IF_FAILED(hr); + return S_OK; } HRESULT diff --git a/src/AspNetCoreModuleV2/RequestHandlerLib/environmentvariablehash.h b/src/AspNetCoreModuleV2/RequestHandlerLib/environmentvariablehash.h index 8fa054f2a9..98bcd5ada4 100644 --- a/src/AspNetCoreModuleV2/RequestHandlerLib/environmentvariablehash.h +++ b/src/AspNetCoreModuleV2/RequestHandlerLib/environmentvariablehash.h @@ -76,6 +76,7 @@ private: mutable LONG _cRefs; }; + class ENVIRONMENT_VAR_HASH : public HASH_TABLE { public: @@ -129,3 +130,12 @@ private: ENVIRONMENT_VAR_HASH(const ENVIRONMENT_VAR_HASH &); void operator=(const ENVIRONMENT_VAR_HASH &); }; + +struct ENVIRONMENT_VAR_HASH_DELETER +{ + void operator ()(ENVIRONMENT_VAR_HASH* hashTable) const + { + hashTable->Clear(); + delete hashTable; + } +}; diff --git a/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeployer.cs b/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeployer.cs index d2df4a8f8c..8c07bec312 100644 --- a/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeployer.cs +++ b/src/Microsoft.AspNetCore.Server.IntegrationTesting.IIS/IISDeployer.cs @@ -341,7 +341,7 @@ namespace Microsoft.AspNetCore.Server.IntegrationTesting.IIS throw new InvalidOperationException("Site not stopped yet"); } - if (appPool.WorkerProcesses.Any(wp => wp.State == WorkerProcessState.Running || + if (appPool.WorkerProcesses != null && appPool.WorkerProcesses.Any(wp => wp.State == WorkerProcessState.Running || wp.State == WorkerProcessState.Stopping)) { throw new InvalidOperationException("WorkerProcess not stopped yet");