From 53d0eb5d734ef64850631f49f168928f89007fa4 Mon Sep 17 00:00:00 2001 From: Dmitry Rogozhkin Date: Tue, 28 Apr 2026 15:50:18 -0700 Subject: [PATCH] Reorder delete of OsInterface and MhwInterface MhwInterface depends on OsInterface and can not be deleted afterwards as dereferences of OsInterface will happen. Fixes: https://github.com/intel/media-driver/issues/2001 Signed-off-by: Dmitry Rogozhkin --- .../media_interfaces_dg2/media_interfaces_dg2.cpp | 14 +++++++------- .../media_interfaces_g12_tgllp.cpp | 14 +++++++------- .../media_interfaces_pvc/media_interfaces_pvc.cpp | 12 ++++++------ .../media_interfaces_xehp_sdv.cpp | 12 ++++++------ .../media_interfaces/media_interfaces_mcpy_next.h | 12 ++++++------ 5 files changed, 32 insertions(+), 32 deletions(-) diff --git a/media_driver/media_interface/media_interfaces_dg2/media_interfaces_dg2.cpp b/media_driver/media_interface/media_interfaces_dg2/media_interfaces_dg2.cpp index 6e32790361..1020de2c7c 100644 --- a/media_driver/media_interface/media_interfaces_dg2/media_interfaces_dg2.cpp +++ b/media_driver/media_interface/media_interfaces_dg2/media_interfaces_dg2.cpp @@ -353,6 +353,12 @@ MOS_STATUS McpyDeviceXe_Hpm::Initialize( MhwInterfaces* mhwInterfaces = nullptr; auto deleterOnFailure = [&](bool deleteOsInterface, bool deleteMhwInterface){ + if (deleteMhwInterface && mhwInterfaces != nullptr) + { + mhwInterfaces->Destroy(); + MOS_Delete(mhwInterfaces); + } + if (deleteOsInterface && osInterface != nullptr) { if (osInterface->pfnDestroy) @@ -362,12 +368,6 @@ MOS_STATUS McpyDeviceXe_Hpm::Initialize( MOS_FreeMemory(osInterface); } - if (deleteMhwInterface && mhwInterfaces != nullptr) - { - mhwInterfaces->Destroy(); - MOS_Delete(mhwInterfaces); - } - MOS_Delete(device); }; @@ -1113,4 +1113,4 @@ MOS_STATUS CodechalInterfacesXe_Hpm::CreateCodecHalInterface(MhwInterfaces *mhwI } #endif // USE_CODECHAL_DEBUG_TOOL return MOS_STATUS_SUCCESS; -} \ No newline at end of file +} diff --git a/media_driver/media_interface/media_interfaces_m12_tgllp/media_interfaces_g12_tgllp.cpp b/media_driver/media_interface/media_interfaces_m12_tgllp/media_interfaces_g12_tgllp.cpp index 1eb1830010..79f201faf7 100644 --- a/media_driver/media_interface/media_interfaces_m12_tgllp/media_interfaces_g12_tgllp.cpp +++ b/media_driver/media_interface/media_interfaces_m12_tgllp/media_interfaces_g12_tgllp.cpp @@ -415,6 +415,12 @@ MOS_STATUS McpyDeviceG12Tgllp::Initialize( MhwInterfaces* mhwInterfaces = nullptr; auto deleterOnFailure = [&](bool deleteOsInterface, bool deleteMhwInterface){ + if (deleteMhwInterface && mhwInterfaces != nullptr) + { + mhwInterfaces->Destroy(); + MOS_Delete(mhwInterfaces); + } + if (deleteOsInterface && osInterface != nullptr) { if (osInterface->pfnDestroy) @@ -424,12 +430,6 @@ MOS_STATUS McpyDeviceG12Tgllp::Initialize( MOS_FreeMemory(osInterface); } - if (deleteMhwInterface && mhwInterfaces != nullptr) - { - mhwInterfaces->Destroy(); - MOS_Delete(mhwInterfaces); - } - MOS_Delete(device); }; @@ -1012,4 +1012,4 @@ MOS_STATUS MediaInterfacesHwInfoDeviceG12Tgllp::Initialize(PLATFORM platform) { m_hwInfo.SetDeviceInfo(IP_VERSION_M12_0, platform.usRevId); return MOS_STATUS_SUCCESS; -} \ No newline at end of file +} diff --git a/media_driver/media_interface/media_interfaces_pvc/media_interfaces_pvc.cpp b/media_driver/media_interface/media_interfaces_pvc/media_interfaces_pvc.cpp index 171fea1a17..a79ae9e198 100644 --- a/media_driver/media_interface/media_interfaces_pvc/media_interfaces_pvc.cpp +++ b/media_driver/media_interface/media_interfaces_pvc/media_interfaces_pvc.cpp @@ -333,6 +333,12 @@ MOS_STATUS McpyDeviceXe_Xpm_Plus::Initialize( MhwInterfaces* mhwInterfaces = nullptr; auto deleterOnFailure = [&](bool deleteOsInterface, bool deleteMhwInterface){ + if (deleteMhwInterface && mhwInterfaces != nullptr) + { + mhwInterfaces->Destroy(); + MOS_Delete(mhwInterfaces); + } + if (deleteOsInterface && osInterface != nullptr) { if (osInterface->pfnDestroy) @@ -342,12 +348,6 @@ MOS_STATUS McpyDeviceXe_Xpm_Plus::Initialize( MOS_FreeMemory(osInterface); } - if (deleteMhwInterface && mhwInterfaces != nullptr) - { - mhwInterfaces->Destroy(); - MOS_Delete(mhwInterfaces); - } - MOS_Delete(device); }; diff --git a/media_driver/media_interface/media_interfaces_xehp_sdv/media_interfaces_xehp_sdv.cpp b/media_driver/media_interface/media_interfaces_xehp_sdv/media_interfaces_xehp_sdv.cpp index 20d961cfe1..7aba022c6f 100644 --- a/media_driver/media_interface/media_interfaces_xehp_sdv/media_interfaces_xehp_sdv.cpp +++ b/media_driver/media_interface/media_interfaces_xehp_sdv/media_interfaces_xehp_sdv.cpp @@ -311,6 +311,12 @@ MOS_STATUS McpyDeviceXe_Xpm::Initialize( MhwInterfaces* mhwInterfaces = nullptr; auto deleterOnFailure = [&](bool deleteOsInterface, bool deleteMhwInterface){ + if (deleteMhwInterface && mhwInterfaces != nullptr) + { + mhwInterfaces->Destroy(); + MOS_Delete(mhwInterfaces); + } + if (deleteOsInterface && osInterface != nullptr) { if (osInterface->pfnDestroy) @@ -320,12 +326,6 @@ MOS_STATUS McpyDeviceXe_Xpm::Initialize( MOS_FreeMemory(osInterface); } - if (deleteMhwInterface && mhwInterfaces != nullptr) - { - mhwInterfaces->Destroy(); - MOS_Delete(mhwInterfaces); - } - MOS_Delete(device); }; diff --git a/media_softlet/agnostic/common/media_interfaces/media_interfaces_mcpy_next.h b/media_softlet/agnostic/common/media_interfaces/media_interfaces_mcpy_next.h index ba2948b7fa..43bc347191 100644 --- a/media_softlet/agnostic/common/media_interfaces/media_interfaces_mcpy_next.h +++ b/media_softlet/agnostic/common/media_interfaces/media_interfaces_mcpy_next.h @@ -90,6 +90,12 @@ class McpyDeviceNext_T : public McpyDeviceNext Mhw *mhwInterfaces = nullptr; auto deleterOnFailure = [&](bool deleteOsInterface, bool deleteMhwInterface) { + if (deleteMhwInterface && mhwInterfaces != nullptr) + { + mhwInterfaces->Destroy(); + MOS_Delete(mhwInterfaces); + } + if (deleteOsInterface && osInterface != nullptr) { if (osInterface->pfnDestroy) @@ -99,12 +105,6 @@ class McpyDeviceNext_T : public McpyDeviceNext MOS_FreeMemory(osInterface); } - if (deleteMhwInterface && mhwInterfaces != nullptr) - { - mhwInterfaces->Destroy(); - MOS_Delete(mhwInterfaces); - } - MOS_Delete(device); };