summary refs log tree commit diff stats
path: root/worker
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2019-05-19 09:50:17 +0000
committerDrew DeVault <sir@cmpwn.com>2019-05-19 11:51:20 -0400
commit34dd6bc6354cd3592ed51da83de1a0839e08a37d (patch)
tree6c65d68427ddd537eff30d44841ae8f7912f08c8 /worker
parent7c6325977b55385bc65f0a08f4da8ed6dfede52a (diff)
downloadaerc-34dd6bc6354cd3592ed51da83de1a0839e08a37d.tar.gz
worker/types/worker: set ID before sending message
The previous code set the message ID after sending it, which could result in
the receiver reading the ID before it's set.
Diffstat (limited to 'worker')
-rw-r--r--worker/types/worker.go12
1 files changed, 9 insertions, 3 deletions
diff --git a/worker/types/worker.go b/worker/types/worker.go
index e2af61f..5647ae3 100644
--- a/worker/types/worker.go
+++ b/worker/types/worker.go
@@ -30,11 +30,13 @@ func NewWorker(logger *log.Logger) *Worker {
 	}
 }
 
-func (worker *Worker) setCallback(msg WorkerMessage,
-	cb func(msg WorkerMessage)) {
-
+func (worker *Worker) setId(msg WorkerMessage) {
 	msg.setId(nextId)
 	nextId++
+}
+
+func (worker *Worker) setCallback(msg WorkerMessage,
+	cb func(msg WorkerMessage)) {
 
 	if cb != nil {
 		worker.mutex.Lock()
@@ -59,6 +61,8 @@ func (worker *Worker) getCallback(msg WorkerMessage) (func(msg WorkerMessage),
 func (worker *Worker) PostAction(msg WorkerMessage,
 	cb func(msg WorkerMessage)) {
 
+	worker.setId(msg)
+
 	if resp := msg.InResponseTo(); resp != nil {
 		worker.Logger.Printf("(ui)=> %T:%T\n", msg, resp)
 	} else {
@@ -72,6 +76,8 @@ func (worker *Worker) PostAction(msg WorkerMessage,
 func (worker *Worker) PostMessage(msg WorkerMessage,
 	cb func(msg WorkerMessage)) {
 
+	worker.setId(msg)
+
 	if resp := msg.InResponseTo(); resp != nil {
 		worker.Logger.Printf("->(ui) %T:%T\n", msg, resp)
 	} else {
195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233