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();
}
VOID
ClearApplication()
{
m_pApplication = NULL;
}
HRESULT
EnsureApplicationCreated();

View File

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

View File

@ -174,7 +174,7 @@ APPLICATION_INFO::UpdateAppOfflineFileHandle()
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);
// RecycleApplication is called on a separate thread.
RecycleApplication(pRecord, m_hostingModel);
RecycleApplication(pRecord);
pRecord->DereferenceApplicationInfo();
path = context.MultiSz.Next(path);
}
@ -480,19 +480,21 @@ APPLICATION_MANAGER::DoRecycleApplication(
// static
VOID
APPLICATION_MANAGER::RecycleApplication(
_In_ APPLICATION_INFO * pEntry,
_In_ APP_HOSTING_MODEL hostingModel
_In_ APPLICATION_INFO * pEntry
)
{
APPLICATION* pApplication = pEntry->QueryApplication();
DBG_ASSERT(pApplication != NULL);
// Reference the application first
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
@ -505,6 +507,5 @@ APPLICATION_MANAGER::RecycleApplication(
0, // default creation flags
NULL); // receive thread identifier
CloseHandle(hThread);
}