diff --git a/src/AspNetCore/Inc/applicationinfo.h b/src/AspNetCore/Inc/applicationinfo.h index cb75e34066..7be36427f2 100644 --- a/src/AspNetCore/Inc/applicationinfo.h +++ b/src/AspNetCore/Inc/applicationinfo.h @@ -142,12 +142,6 @@ public: pApplication->DereferenceApplication(); } - VOID - ClearApplication() - { - m_pApplication = NULL; - } - HRESULT EnsureApplicationCreated(); diff --git a/src/AspNetCore/Inc/applicationmanager.h b/src/AspNetCore/Inc/applicationmanager.h index 11cfe04c67..cf5a11d31c 100644 --- a/src/AspNetCore/Inc/applicationmanager.h +++ b/src/AspNetCore/Inc/applicationmanager.h @@ -58,8 +58,7 @@ public: static VOID RecycleApplication( - _In_ APPLICATION_INFO * pEntry, - _In_ APP_HOSTING_MODEL hostingModel + _In_ APPLICATION_INFO * pEntry ); static diff --git a/src/AspNetCore/Src/applicationinfo.cpp b/src/AspNetCore/Src/applicationinfo.cpp index ac1551af3e..71f511ad15 100644 --- a/src/AspNetCore/Src/applicationinfo.cpp +++ b/src/AspNetCore/Src/applicationinfo.cpp @@ -174,7 +174,7 @@ APPLICATION_INFO::UpdateAppOfflineFileHandle() strEventMsg.QueryStr()); } - APPLICATION_MANAGER::RecycleApplication(this, m_pConfiguration->QueryHostingModel()); + APPLICATION_MANAGER::RecycleApplication(this); } } diff --git a/src/AspNetCore/Src/applicationmanager.cxx b/src/AspNetCore/Src/applicationmanager.cxx index 233908c10f..beee7456ed 100644 --- a/src/AspNetCore/Src/applicationmanager.cxx +++ b/src/AspNetCore/Src/applicationmanager.cxx @@ -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); }