Update RecycleApplication function (#634)

removing hostingmodel input from recycleapplication call and fix memory leak in recycle out of process application
This commit is contained in:
pan-wang 2018-03-07 11:45:51 -08:00 committed by GitHub
parent 0e28f34c1a
commit f32addd408
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 10 additions and 16 deletions

View File

@ -142,12 +142,6 @@ public:
pApplication->DereferenceApplication(); pApplication->DereferenceApplication();
} }
VOID
ClearApplication()
{
m_pApplication = NULL;
}
HRESULT HRESULT
EnsureApplicationCreated(); EnsureApplicationCreated();

View File

@ -58,8 +58,7 @@ public:
static static
VOID VOID
RecycleApplication( RecycleApplication(
_In_ APPLICATION_INFO * pEntry, _In_ APPLICATION_INFO * pEntry
_In_ APP_HOSTING_MODEL hostingModel
); );
static static

View File

@ -174,7 +174,7 @@ APPLICATION_INFO::UpdateAppOfflineFileHandle()
strEventMsg.QueryStr()); strEventMsg.QueryStr());
} }
APPLICATION_MANAGER::RecycleApplication(this, m_pConfiguration->QueryHostingModel()); APPLICATION_MANAGER::RecycleApplication(this);
} }
} }

View File

@ -370,7 +370,7 @@ APPLICATION_MANAGER::RecycleApplicationFromManager(
DBG_ASSERT(pRecord != NULL); DBG_ASSERT(pRecord != NULL);
// RecycleApplication is called on a separate thread. // RecycleApplication is called on a separate thread.
RecycleApplication(pRecord, m_hostingModel); RecycleApplication(pRecord);
pRecord->DereferenceApplicationInfo(); pRecord->DereferenceApplicationInfo();
path = context.MultiSz.Next(path); path = context.MultiSz.Next(path);
} }
@ -480,19 +480,21 @@ APPLICATION_MANAGER::DoRecycleApplication(
// static // static
VOID VOID
APPLICATION_MANAGER::RecycleApplication( APPLICATION_MANAGER::RecycleApplication(
_In_ APPLICATION_INFO * pEntry, _In_ APPLICATION_INFO * pEntry
_In_ APP_HOSTING_MODEL hostingModel
) )
{ {
APPLICATION* pApplication = pEntry->QueryApplication(); APPLICATION* pApplication = pEntry->QueryApplication();
DBG_ASSERT(pApplication != NULL);
// Reference the application first // Reference the application first
pApplication->ReferenceApplication(); pApplication->ReferenceApplication();
if (hostingModel == APP_HOSTING_MODEL::HOSTING_OUT_PROCESS) if (pApplication->QueryConfig()->QueryHostingModel() == HOSTING_OUT_PROCESS)
{ {
pEntry->ClearApplication(); // Need to set m_pApplication to NULL first
// to avoid mapping new request to the recycled application
// A new application instance will be created for new request
pEntry->ClearAndDereferenceApplication();
} }
// Reset application pointer to NULL // Reset application pointer to NULL
@ -505,6 +507,5 @@ APPLICATION_MANAGER::RecycleApplication(
0, // default creation flags 0, // default creation flags
NULL); // receive thread identifier NULL); // receive thread identifier
CloseHandle(hThread); CloseHandle(hThread);
} }