From d4b397a5da3dba6ee8ee1a68747f9b741dc940ca Mon Sep 17 00:00:00 2001 From: Haesu Gwon Date: Tue, 2 Apr 2024 16:31:29 +0900 Subject: [PATCH] [MediaVision] Prevent GC of object including unmanaged handle (#6044) --- .../MediaVision/BarcodeGenerator.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Tizen.Multimedia.Vision/MediaVision/BarcodeGenerator.cs b/src/Tizen.Multimedia.Vision/MediaVision/BarcodeGenerator.cs index 061781dd0b2..1ff8def60f5 100755 --- a/src/Tizen.Multimedia.Vision/MediaVision/BarcodeGenerator.cs +++ b/src/Tizen.Multimedia.Vision/MediaVision/BarcodeGenerator.cs @@ -61,6 +61,7 @@ private static void SetDesignQrOptions(QrConfiguration qrConfig, BarcodeGenerati InteropBarcode.GenerateSource(EngineConfiguration.GetHandle(config), message, type, qrMode, qrEcc, qrVersion, source.Handle). Validate("Failed to generate source"); + GC.KeepAlive(config); } catch (Exception) { @@ -128,6 +129,8 @@ public static MediaVisionSource GenerateSource(string message, QrConfiguration q public static MediaVisionSource GenerateSource(string message, QrConfiguration qrConfig, BarcodeGenerationConfiguration config) { + BarcodeGenerationConfiguration config_ = null; + if (qrConfig == null) { throw new ArgumentNullException(nameof(qrConfig)); @@ -145,14 +148,18 @@ public static MediaVisionSource GenerateSource(string message, QrConfiguration q if (qrConfig.DataShape != QrShape.Rectangular || qrConfig.FinderShape != QrShape.Rectangular || qrConfig.EmbedImagePath != null) { - config = new BarcodeGenerationConfiguration(); + // Design QR case. The config_ for legacy QR will be null. + config_ = new BarcodeGenerationConfiguration(); } } - SetDesignQrOptions(qrConfig, config); + SetDesignQrOptions(qrConfig, config ?? config_); - return GenerateSource(config, message, BarcodeType.QR, (int)qrConfig.Mode, + var mediaVisionSource = GenerateSource(config ?? config_, message, BarcodeType.QR, (int)qrConfig.Mode, (int)qrConfig.ErrorCorrectionLevel, qrConfig.Version); + config_?.Dispose(); + + return mediaVisionSource; } ///