mirror of https://git.ffmpeg.org/ffmpeg.git
avutil/hwcontext_vulkan: fix memleak when device_create is skipped
Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
This commit is contained in:
parent
1a8e766984
commit
bf1e5f2773
|
@ -1164,6 +1164,11 @@ static int setup_queue_families(AVHWDeviceContext *ctx, VkDeviceCreateInfo *cd)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Only resources created by vulkan_device_create should be released here,
|
||||||
|
* resources created by vulkan_device_init should be released by
|
||||||
|
* vulkan_device_uninit, to make sure we don't free user provided resources,
|
||||||
|
* and there is no leak.
|
||||||
|
*/
|
||||||
static void vulkan_device_free(AVHWDeviceContext *ctx)
|
static void vulkan_device_free(AVHWDeviceContext *ctx)
|
||||||
{
|
{
|
||||||
VulkanDevicePriv *p = ctx->internal->priv;
|
VulkanDevicePriv *p = ctx->internal->priv;
|
||||||
|
@ -1183,15 +1188,20 @@ static void vulkan_device_free(AVHWDeviceContext *ctx)
|
||||||
if (p->libvulkan)
|
if (p->libvulkan)
|
||||||
dlclose(p->libvulkan);
|
dlclose(p->libvulkan);
|
||||||
|
|
||||||
|
RELEASE_PROPS(hwctx->enabled_inst_extensions, hwctx->nb_enabled_inst_extensions);
|
||||||
|
RELEASE_PROPS(hwctx->enabled_dev_extensions, hwctx->nb_enabled_dev_extensions);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void vulkan_device_uninit(AVHWDeviceContext *ctx)
|
||||||
|
{
|
||||||
|
VulkanDevicePriv *p = ctx->internal->priv;
|
||||||
|
|
||||||
for (uint32_t i = 0; i < p->nb_tot_qfs; i++) {
|
for (uint32_t i = 0; i < p->nb_tot_qfs; i++) {
|
||||||
pthread_mutex_destroy(p->qf_mutex[i]);
|
pthread_mutex_destroy(p->qf_mutex[i]);
|
||||||
av_freep(&p->qf_mutex[i]);
|
av_freep(&p->qf_mutex[i]);
|
||||||
}
|
}
|
||||||
av_freep(&p->qf_mutex);
|
av_freep(&p->qf_mutex);
|
||||||
|
|
||||||
RELEASE_PROPS(hwctx->enabled_inst_extensions, hwctx->nb_enabled_inst_extensions);
|
|
||||||
RELEASE_PROPS(hwctx->enabled_dev_extensions, hwctx->nb_enabled_dev_extensions);
|
|
||||||
|
|
||||||
ff_vk_uninit(&p->vkctx);
|
ff_vk_uninit(&p->vkctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3702,6 +3712,7 @@ const HWContextType ff_hwcontext_type_vulkan = {
|
||||||
.frames_priv_size = sizeof(VulkanFramesPriv),
|
.frames_priv_size = sizeof(VulkanFramesPriv),
|
||||||
|
|
||||||
.device_init = &vulkan_device_init,
|
.device_init = &vulkan_device_init,
|
||||||
|
.device_uninit = &vulkan_device_uninit,
|
||||||
.device_create = &vulkan_device_create,
|
.device_create = &vulkan_device_create,
|
||||||
.device_derive = &vulkan_device_derive,
|
.device_derive = &vulkan_device_derive,
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue