From fe4a32e425ab0a5b8fd080dae1a5f2f26a591714 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Tue, 13 Jun 2023 12:25:07 -0700 Subject: [PATCH] default/epicsMessageQueue: avoid volatile flag Only one place where eventSent was accessed without locking. Move this load earlier. --- modules/libcom/src/osi/os/default/osdMessageQueue.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/libcom/src/osi/os/default/osdMessageQueue.cpp b/modules/libcom/src/osi/os/default/osdMessageQueue.cpp index dfbe9886c..b68787fdd 100644 --- a/modules/libcom/src/osi/os/default/osdMessageQueue.cpp +++ b/modules/libcom/src/osi/os/default/osdMessageQueue.cpp @@ -40,7 +40,7 @@ struct threadNode { struct eventNode *evp; void *buf; unsigned int size; - volatile bool eventSent; + bool eventSent; }; /* @@ -366,9 +366,10 @@ myReceive(epicsMessageQueueId pmsg, void *message, unsigned int size, freeEventNode(pmsg, threadNode.evp, status); + bool wasSent = threadNode.eventSent; epicsMutexUnlock(pmsg->mutex); - if (threadNode.eventSent && (threadNode.size <= size)) + if (wasSent && (threadNode.size <= size)) return threadNode.size; return -1; }