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 {