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 // Set up stdout redirect
SRWExclusiveLock lock(m_stateLock); SRWExclusiveLock lock(m_stateLock);
if (m_pLoggerProvider == NULL) if (m_pLoggerProvider == NULL)
{ {
hr = LoggingHelpers::CreateLoggingProvider( hr = LoggingHelpers::CreateLoggingProvider(
@ -394,28 +393,22 @@ IN_PROCESS_APPLICATION::SetEnvironementVariablesOnWorkerProcess(
{ {
HRESULT hr = S_OK; HRESULT hr = S_OK;
ENVIRONMENT_VAR_HASH* pHashTable = NULL; 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->QueryEnvironmentVariables(),
m_pConfig->QueryWindowsAuthEnabled(), m_pConfig->QueryWindowsAuthEnabled(),
m_pConfig->QueryBasicAuthEnabled(), m_pConfig->QueryBasicAuthEnabled(),
m_pConfig->QueryAnonymousAuthEnabled(), m_pConfig->QueryAnonymousAuthEnabled(),
&pHashTable))) &pHashTable));
{
goto Finished;
}
pHashTable->Apply(ENVIRONMENT_VAR_HELPERS::AppendEnvironmentVariables, &hr); table.reset(pHashTable);
if (FAILED(hr))
{ table->Apply(ENVIRONMENT_VAR_HELPERS::AppendEnvironmentVariables, &hr);
goto Finished; RETURN_IF_FAILED(hr);
}
pHashTable->Apply(ENVIRONMENT_VAR_HELPERS::SetEnvironmentVariables, &hr); table->Apply(ENVIRONMENT_VAR_HELPERS::SetEnvironmentVariables, &hr);
if (FAILED(hr)) RETURN_IF_FAILED(hr);
{ return S_OK;
goto Finished;
}
Finished:
return hr;
} }
HRESULT HRESULT

View File

@ -76,6 +76,7 @@ private:
mutable LONG _cRefs; mutable LONG _cRefs;
}; };
class ENVIRONMENT_VAR_HASH : public HASH_TABLE<ENVIRONMENT_VAR_ENTRY, PWSTR> class ENVIRONMENT_VAR_HASH : public HASH_TABLE<ENVIRONMENT_VAR_ENTRY, PWSTR>
{ {
public: public:
@ -129,3 +130,12 @@ private:
ENVIRONMENT_VAR_HASH(const ENVIRONMENT_VAR_HASH &); ENVIRONMENT_VAR_HASH(const ENVIRONMENT_VAR_HASH &);
void operator=(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"); 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)) wp.State == WorkerProcessState.Stopping))
{ {
throw new InvalidOperationException("WorkerProcess not stopped yet"); throw new InvalidOperationException("WorkerProcess not stopped yet");