diff mbox series

[FFmpeg-devel,v2,6/8] avfilter/dnn_backend_openvino: fix leak of ov_shape_t

Message ID tencent_3F774DB34F9DD539A741B8ED162DCD4F2007@qq.com
State Accepted
Commit 37123100d29ee934188b4007d75751e3c0fa2eba
Headers show
Series [FFmpeg-devel,v2,1/8] avfilter/dnn_filter_common: fix memleak | expand

Checks

Context Check Description
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Zhao Zhili Sept. 2, 2023, 8:23 a.m. UTC
From: Zhao Zhili <zhilizhao@tencent.com>

---
 libavfilter/dnn/dnn_backend_openvino.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/libavfilter/dnn/dnn_backend_openvino.c b/libavfilter/dnn/dnn_backend_openvino.c
index b3910adfc3..f9944211da 100644
--- a/libavfilter/dnn/dnn_backend_openvino.c
+++ b/libavfilter/dnn/dnn_backend_openvino.c
@@ -225,6 +225,7 @@  static int fill_model_input_ov(OVModel *ov_model, OVRequestItem *request)
         status = ov_port_get_element_type(ov_model->input_port, &precision);
         if (status != OK) {
             av_log(ctx, AV_LOG_ERROR, "Failed to get input port data type.\n");
+            ov_shape_free(&input_shape);
             return ov2_map_error(status, NULL);
         }
     } else {
@@ -236,8 +237,10 @@  static int fill_model_input_ov(OVModel *ov_model, OVRequestItem *request)
     input.channels = dims[1];
     input.dt = precision_to_datatype(precision);
     input.data = av_malloc(input.height * input.width * input.channels * get_datatype_size(input.dt));
-    if (!input.data)
+    if (!input.data) {
+        ov_shape_free(&input_shape);
         return AVERROR(ENOMEM);
+    }
     input_data_ptr = input.data;
 #else
     status = ie_infer_request_get_blob(request->infer_request, task->input_name, &input_blob);
@@ -300,6 +303,7 @@  static int fill_model_input_ov(OVModel *ov_model, OVRequestItem *request)
         }
 #if HAVE_OPENVINO2
         status = ov_tensor_create_from_host_ptr(precision, input_shape, input.data, &tensor);
+        ov_shape_free(&input_shape);
         if (status != OK) {
             av_log(ctx, AV_LOG_ERROR, "Failed to create tensor from host prt.\n");
             return ov2_map_error(status, NULL);
@@ -362,12 +366,14 @@  static void infer_completion_callback(void *args)
     status = ov_port_get_element_type(ov_model->output_port, &precision);
     if (status != OK) {
         av_log(ctx, AV_LOG_ERROR, "Failed to get output port data type.\n");
+        ov_shape_free(&output_shape);
         return;
     }
     output.channels = dims[1];
     output.height   = dims[2];
     output.width    = dims[3];
     av_assert0(request->lltask_count <= dims[0]);
+    ov_shape_free(&output_shape);
 #else
     IEStatusCode status;
     dimensions_t dims;