[Stt] Fix lock issue (#127)
[platform/core/csapi/tizenfx.git] / src / Tizen.Uix.Stt / Tizen.Uix.Stt / SttClient.cs
old mode 100644 (file)
new mode 100755 (executable)
index 1860270..c057a86
@@ -374,18 +374,18 @@ namespace Tizen.Uix.Stt
                 lock (thisLock)
                 {
                     _resultDelegate = (IntPtr handle, ResultEvent e, IntPtr data, int dataCount, IntPtr msg, IntPtr userData) =>
-                {
-                    Log.Info(LogTag, "Recognition Result Event Triggered");
-                    if (data != null && msg != null)
-                    {
-                        RecognitionResultEventArgs args = new RecognitionResultEventArgs(e, data, dataCount, Marshal.PtrToStringAnsi(msg));
-                        _recognitionResult?.Invoke(this, args);
-                    }
-                    else
                     {
-                        Log.Info(LogTag, "Recognition Result Event null received");
-                    }
-                };
+                        Log.Info(LogTag, "Recognition Result Event Triggered");
+                        if (data != null && msg != null)
+                        {
+                            RecognitionResultEventArgs args = new RecognitionResultEventArgs(e, data, dataCount, Marshal.PtrToStringAnsi(msg));
+                            _recognitionResult?.Invoke(this, args);
+                        }
+                        else
+                        {
+                            Log.Info(LogTag, "Recognition Result Event null received");
+                        }
+                    };
                     SttError error = SttSetRecognitionResultCB(_handle, _resultDelegate, IntPtr.Zero);
                     if (error != SttError.None)
                     {
@@ -438,7 +438,6 @@ namespace Tizen.Uix.Stt
                     {
                         _stateChanged += value;
                     }
-
                 }
             }
 
@@ -461,7 +460,7 @@ namespace Tizen.Uix.Stt
         /// <summary>
         /// Event to be invoked when an error occurs.
         /// </summary>
-        /// <since_tizen> 3 </since_tizen>
+        /// <since_tizen> 4 </since_tizen>
         public event EventHandler<ErrorOccurredEventArgs> ErrorOccurred
         {
             add
@@ -469,10 +468,10 @@ namespace Tizen.Uix.Stt
                 lock (thisLock)
                 {
                     _errorDelegate = (IntPtr handle, SttError reason, IntPtr userData) =>
-                {
-                    ErrorOccurredEventArgs args = new ErrorOccurredEventArgs(handle, reason);
-                    _errorOccurred?.Invoke(this, args);
-                };
+                    {
+                        ErrorOccurredEventArgs args = new ErrorOccurredEventArgs(handle, reason);
+                        _errorOccurred?.Invoke(this, args);
+                    };
                     SttError error = SttSetErrorCB(_handle, _errorDelegate, IntPtr.Zero);
                     if (error != SttError.None)
                     {
@@ -484,7 +483,6 @@ namespace Tizen.Uix.Stt
                         _errorOccurred += value;
                     }
                 }
-
             }
 
             remove
@@ -513,12 +511,12 @@ namespace Tizen.Uix.Stt
                 lock (thisLock)
                 {
                     _languageDelegate = (IntPtr handle, IntPtr previousLanguage, IntPtr currentLanguage, IntPtr userData) =>
-                {
-                    string previousLanguageString = Marshal.PtrToStringAnsi(previousLanguage);
-                    string currentLanguageString = Marshal.PtrToStringAnsi(currentLanguage);
-                    DefaultLanguageChangedEventArgs args = new DefaultLanguageChangedEventArgs(previousLanguageString, currentLanguageString);
-                    _defaultLanguageChanged?.Invoke(this, args);
-                };
+                    {
+                        string previousLanguageString = Marshal.PtrToStringAnsi(previousLanguage);
+                        string currentLanguageString = Marshal.PtrToStringAnsi(currentLanguage);
+                        DefaultLanguageChangedEventArgs args = new DefaultLanguageChangedEventArgs(previousLanguageString, currentLanguageString);
+                        _defaultLanguageChanged?.Invoke(this, args);
+                    };
                     SttError error = SttSetDefaultLanguageChangedCB(_handle, _languageDelegate, IntPtr.Zero);
                     if (error != SttError.None)
                     {
@@ -530,7 +528,6 @@ namespace Tizen.Uix.Stt
                         _defaultLanguageChanged += value;
                     }
                 }
-
             }
 
             remove
@@ -560,12 +557,12 @@ namespace Tizen.Uix.Stt
                 lock (thisLock)
                 {
                     _engineDelegate = (IntPtr handle, IntPtr engineId, IntPtr language, bool supportSilence, bool needCredential, IntPtr userData) =>
-                {
-                    string engineIdString = Marshal.PtrToStringAnsi(engineId);
-                    string languageString = Marshal.PtrToStringAnsi(language);
-                    EngineChangedEventArgs args = new EngineChangedEventArgs(engineIdString, languageString, supportSilence, needCredential);
-                    _engineChanged?.Invoke(this, args);
-                };
+                    {
+                        string engineIdString = Marshal.PtrToStringAnsi(engineId);
+                        string languageString = Marshal.PtrToStringAnsi(language);
+                        EngineChangedEventArgs args = new EngineChangedEventArgs(engineIdString, languageString, supportSilence, needCredential);
+                        _engineChanged?.Invoke(this, args);
+                    };
                     SttError error = SttSetEngineChangedCB(_handle, _engineDelegate, IntPtr.Zero);
                     if (error != SttError.None)
                     {
@@ -653,7 +650,6 @@ namespace Tizen.Uix.Stt
                         Log.Error(LogTag, "GetRecordingVolume Failed with error " + error);
                         return 0.0f;
                     }
-
                 }
 
                 return volume;
@@ -771,17 +767,20 @@ namespace Tizen.Uix.Stt
         public IEnumerable<ResultTime> GetDetailedResult()
         {
             List<ResultTime> list = new List<ResultTime>();
-            _resultTimeDelegate = (IntPtr handle, int index, TimeEvent e, IntPtr text, IntPtr startTime, IntPtr endTime, IntPtr userData) =>
-            {
-                _result = new ResultTime(index, e, Marshal.PtrToStringAnsi(text), (long)startTime, (long)endTime);
-                list.Add(_result);
-                return true;
-            };
-            SttError error = SttForeachDetailedResult(_handle, _resultTimeDelegate, IntPtr.Zero);
-            if (error != SttError.None)
+            lock (thisLock)
             {
-                Log.Error(LogTag, "GetDetailedResult Failed with error " + error);
-                throw ExceptionFactory.CreateException(error);
+                _resultTimeDelegate = (IntPtr handle, int index, TimeEvent e, IntPtr text, IntPtr startTime, IntPtr endTime, IntPtr userData) =>
+                {
+                    _result = new ResultTime(index, e, Marshal.PtrToStringAnsi(text), (long)startTime, (long)endTime);
+                    list.Add(_result);
+                    return true;
+                };
+                SttError error = SttForeachDetailedResult(_handle, _resultTimeDelegate, IntPtr.Zero);
+                if (error != SttError.None)
+                {
+                    Log.Error(LogTag, "GetDetailedResult Failed with error " + error);
+                    throw ExceptionFactory.CreateException(error);
+                }
             }
             return list;
         }
@@ -887,13 +886,13 @@ namespace Tizen.Uix.Stt
             lock (thisLock)
             {
                 SupportedEngineCallback supportedEngineDelegate = (IntPtr handle, IntPtr engineId, IntPtr engineName, IntPtr userData) =>
-            {
-                string id = Marshal.PtrToStringAnsi(engineId);
-                string name = Marshal.PtrToStringAnsi(engineName);
-                SupportedEngine engine = new SupportedEngine(id, name);
-                engineList.Add(engine);
-                return true;
-            };
+                {
+                    string id = Marshal.PtrToStringAnsi(engineId);
+                    string name = Marshal.PtrToStringAnsi(engineName);
+                    SupportedEngine engine = new SupportedEngine(id, name);
+                    engineList.Add(engine);
+                    return true;
+                };
                 SttError error = SttForeEachSupportedEngines(_handle, supportedEngineDelegate, IntPtr.Zero);
                 if (error != SttError.None)
                 {
@@ -1016,7 +1015,7 @@ namespace Tizen.Uix.Stt
         /// The language is specified as an ISO 3166 alpha-2 two letter country-code followed by ISO 639-1 for the two-letter language code.
         /// For example, "ko_KR" for Korean, "en_US" for American English.
         /// </summary>
-        /// <since_tizen> 3 </since_tizen>
+        /// <since_tizen> 4 </since_tizen>
         /// <privilege>
         /// http://tizen.org/privilege/recorder
         /// </privilege>
@@ -1040,11 +1039,11 @@ namespace Tizen.Uix.Stt
             lock (thisLock)
             {
                 SupportedLanguageCallback supportedLanguageDelegate = (IntPtr handle, IntPtr language, IntPtr userData) =>
-            {
-                string lang = Marshal.PtrToStringAnsi(language);
-                languageList.Add(lang);
-                return true;
-            };
+                {
+                    string lang = Marshal.PtrToStringAnsi(language);
+                    languageList.Add(lang);
+                    return true;
+                };
 
                 SttError error = SttForeachSupportedLanguages(_handle, supportedLanguageDelegate, IntPtr.Zero);
                 if (error != SttError.None)
@@ -1121,7 +1120,6 @@ namespace Tizen.Uix.Stt
                             recType = "stt.recognition.type.MAP";
                             break;
                         }
-
                 }
 
                 SttError error = SttIsRecognitionTypeSupported(_handle, recType, out supported);
@@ -1130,7 +1128,6 @@ namespace Tizen.Uix.Stt
                     Log.Error(LogTag, "IsRecognitionTypeSupported Failed with error " + error);
                     throw ExceptionFactory.CreateException(error);
                 }
-
             }
 
             return supported;
@@ -1392,7 +1389,6 @@ namespace Tizen.Uix.Stt
                             recType = "stt.recognition.type.MAP";
                             break;
                         }
-
                 }
 
                 SttError error = SttStart(_handle, language, recType);
@@ -1492,23 +1488,34 @@ namespace Tizen.Uix.Stt
         }
 
         /// <summary>
-        /// A method to release resources.
+        /// Method to release resources.
         /// </summary>
+        /// <since_tizen> 3 </since_tizen>
         public void Dispose()
         {
             Dispose(true);
         }
 
+        /// <summary>
+        /// Method to release resources.
+        /// </summary>
+        /// <since_tizen> 3 </since_tizen>
+        /// <param name="disposing">
+        /// The boolean value for destoying stt handle.
+        /// </param>
         protected virtual void Dispose(bool disposing)
         {
             if (!disposedValue)
             {
                 if (disposing)
                 {
-                    SttError error = SttDestroy(_handle);
-                    if (error != SttError.None)
+                    lock (thisLock)
                     {
-                        Log.Error(LogTag, "Destroy Failed with error " + error);
+                        SttError error = SttDestroy(_handle);
+                        if (error != SttError.None)
+                        {
+                            Log.Error(LogTag, "Destroy Failed with error " + error);
+                        }
                     }
                 }