Free environment variable table in inprocess application (#1254)

This commit is contained in:
Justin Kotalik 2018-08-17 16:29:30 -07:00 committed by GitHub
parent 84d4627b8b
commit a1e8b3a9af
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 19 deletions

View File

@ -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<ENVIRONMENT_VAR_HASH, ENVIRONMENT_VAR_HASH_DELETER> 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

View File

@ -76,6 +76,7 @@ private:
mutable LONG _cRefs;
};
class ENVIRONMENT_VAR_HASH : public HASH_TABLE<ENVIRONMENT_VAR_ENTRY, PWSTR>
{
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;
}
};

View File

@ -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");