[filter] Fix mem leak when set input/output info
authorYongjoo Ahn <yongjoo1.ahn@samsung.com>
Mon, 19 Jun 2023 08:06:55 +0000 (17:06 +0900)
committerSangjung Woo <again4you@gmail.com>
Fri, 7 Jul 2023 04:26:24 +0000 (13:26 +0900)
- Add calls for `gst_tensors_info_free`

Signed-off-by: Yongjoo Ahn <yongjoo1.ahn@samsung.com>
ext/nnstreamer/tensor_filter/tensor_filter_tensorflow_lite.cc
gst/nnstreamer/tensor_filter/tensor_filter_single.c

index c43e595..3e20f5b 100644 (file)
@@ -694,6 +694,7 @@ TFLiteInterpreter::setTensorProp (
 int
 TFLiteInterpreter::setInputTensorProp ()
 {
+  gst_tensors_info_free (&inputTensorMeta);
   return setTensorProp (interpreter->inputs (), &inputTensorMeta);
 }
 
@@ -704,6 +705,7 @@ TFLiteInterpreter::setInputTensorProp ()
 int
 TFLiteInterpreter::setOutputTensorProp ()
 {
+  gst_tensors_info_free (&outputTensorMeta);
   return setTensorProp (interpreter->outputs (), &outputTensorMeta);
 }
 
@@ -1559,25 +1561,25 @@ tflite_setInputDim (const GstTensorFilterProperties *prop, void **private_data,
   /** get current input tensor info for resetting */
   status = core->getInputTensorDim (&cur_in_info);
   if (status != 0)
-    return status;
+    goto exit;
 
   /** set new input tensor info */
   status = core->setInputTensorDim (in_info);
   if (status != 0) {
     tflite_setInputDim_recovery (core, &cur_in_info, "while setting input tensor info", 0);
-    return status;
+    goto exit;
   }
 
   /** update input tensor info */
   if ((status = core->setInputTensorProp ()) != 0) {
     tflite_setInputDim_recovery (core, &cur_in_info, "while updating input tensor info", 1);
-    return status;
+    goto exit;
   }
 
   /** update output tensor info */
   if ((status = core->setOutputTensorProp ()) != 0) {
     tflite_setInputDim_recovery (core, &cur_in_info, "while updating output tensor info", 2);
-    return status;
+    goto exit;
   }
 
   /** update the input and output tensor cache */
@@ -1585,7 +1587,7 @@ tflite_setInputDim (const GstTensorFilterProperties *prop, void **private_data,
   if (status != 0) {
     tflite_setInputDim_recovery (
         core, &cur_in_info, "while updating input and output tensor cache", 2);
-    return status;
+    goto exit;
   }
 
   /** get output tensor info to be returned */
@@ -1593,10 +1595,13 @@ tflite_setInputDim (const GstTensorFilterProperties *prop, void **private_data,
   if (status != 0) {
     tflite_setInputDim_recovery (
         core, &cur_in_info, "while retreiving update output tensor info", 2);
-    return status;
+    goto exit;
   }
 
-  return 0;
+exit:
+  gst_tensors_info_free (&cur_in_info);
+
+  return status;
 }
 
 /**
index 9a8f36a..f5363e1 100644 (file)
@@ -424,6 +424,9 @@ g_tensor_filter_set_input_info (GTensorFilterSingle * self,
   }
 
   if (status == 0) {
+    gst_tensors_info_free (&priv->prop.input_meta);
+    gst_tensors_info_free (&priv->prop.output_meta);
+
     gst_tensors_info_copy (&priv->prop.input_meta, in_info);
     gst_tensors_info_copy (&priv->prop.output_meta, out_info);
   }