about summary refs log tree commit diff stats
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
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.
-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 {