diff --git a/Whisper.net/WhisperProcessor.cs b/Whisper.net/WhisperProcessor.cs index a56aca2a5..e9fc49bc5 100755 --- a/Whisper.net/WhisperProcessor.cs +++ b/Whisper.net/WhisperProcessor.cs @@ -229,7 +229,10 @@ bool OnWhisperAbortHandler() try { - options.OnSegmentEventHandlers.Add(OnSegmentHandler); + lock (options.OnSegmentEventHandlers) + { + options.OnSegmentEventHandlers.Add(OnSegmentHandler); + } options.WhisperAbortEventHandler = OnWhisperAbortHandler; currentCancellationToken = cancellationToken; @@ -261,7 +264,10 @@ await Task.WhenAny(whisperTask, resetEvent.WaitAsync()) } finally { - options.OnSegmentEventHandlers.Remove(OnSegmentHandler); + lock (options.OnSegmentEventHandlers) + { + options.OnSegmentEventHandlers.Remove(OnSegmentHandler); + } } } @@ -776,7 +782,9 @@ private void OnNewSegment(IntPtr state) language!, tokens); - foreach (var handler in options.OnSegmentEventHandlers) + OnSegmentEventHandler[] handlers; + lock (options.OnSegmentEventHandlers) { handlers = options.OnSegmentEventHandlers.ToArray(); } + foreach (var handler in handlers) { handler?.Invoke(eventHandlerArgs); if (currentCancellationToken.HasValue && currentCancellationToken.Value.IsCancellationRequested)