From 12225263718a9f981acfc74677a7558fd8208b24 Mon Sep 17 00:00:00 2001 From: mort5161 Date: Mon, 28 Jul 2014 17:31:58 -0700 Subject: [PATCH] Fixed threading issue on nmea data not yet parsed --- src/NmeaParser.Shared/NmeaDevice.cs | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/NmeaParser.Shared/NmeaDevice.cs b/src/NmeaParser.Shared/NmeaDevice.cs index 1050115..a266eb3 100644 --- a/src/NmeaParser.Shared/NmeaDevice.cs +++ b/src/NmeaParser.Shared/NmeaDevice.cs @@ -26,6 +26,7 @@ namespace NmeaParser { public abstract class NmeaDevice : IDisposable { + private object lockObject = new object(); private string message = ""; private Stream m_stream; System.Threading.CancellationTokenSource tcs; @@ -88,14 +89,20 @@ namespace NmeaParser private void OnData(byte[] data) { var nmea = System.Text.Encoding.UTF8.GetString(data, 0, data.Length); - message += nmea; - var lineEnd = message.IndexOf("\n"); - if (lineEnd > -1) + string line = null; + lock (lockObject) { - string line = message.Substring(0, lineEnd); - message = message.Substring(lineEnd).Trim(); - ProcessMessage(line.Trim()); + message += nmea; + + var lineEnd = message.IndexOf("\n"); + if (lineEnd > -1) + { + line = message.Substring(0, lineEnd).Trim(); + message = message.Substring(lineEnd).Trim(); + } } + if (!string.IsNullOrEmpty(line)) + ProcessMessage(line); } private void ProcessMessage(string p)