From 75841b4a7eeacfced946d0b4361777c4b9148352 Mon Sep 17 00:00:00 2001 From: "Frank A. Krueger" Date: Fri, 10 Nov 2017 12:51:35 -0800 Subject: [PATCH] Fix synchronization of the transmit queue --- Ooui/UI.cs | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/Ooui/UI.cs b/Ooui/UI.cs index 1e4bd24..35889f1 100644 --- a/Ooui/UI.cs +++ b/Ooui/UI.cs @@ -570,15 +570,15 @@ namespace Ooui } } - void QueueStateMessages (EventTarget target) + void QueueStateMessagesLocked (EventTarget target) { if (target == null) return; foreach (var m in target.StateMessages) { - QueueMessage (m); + QueueMessageLocked (m); } } - void QueueMessage (Message message) + void QueueMessageLocked (Message message) { // // Make sure all the referenced objects have been created @@ -589,23 +589,29 @@ namespace Ooui else { if (!createdIds.Contains (message.TargetId)) { createdIds.Add (message.TargetId); - QueueStateMessages (element.GetElementById (message.TargetId)); + QueueStateMessagesLocked (element.GetElementById (message.TargetId)); } if (message.Value is Array a) { for (var i = 0; i < a.Length; i++) { // Console.WriteLine ($"A{i} = {a.GetValue(i)}"); if (a.GetValue (i) is EventTarget e && !createdIds.Contains (e.Id)) { createdIds.Add (e.Id); - QueueStateMessages (e); + QueueStateMessagesLocked (e); } } } } - // // Add it to the queue // - lock (queuedMessages) queuedMessages.Add (message); + queuedMessages.Add (message); + } + + void QueueMessage (Message message) + { + lock (queuedMessages) { + QueueMessageLocked (message); + } sendThrottle.Enabled = true; }