Browse code

daemon/events: let Log be [slightly] blocking

With go1.5's concurrency, the use of a goroutine in Log'ing events was
causing the resulting events to not be in order.

Signed-off-by: Vincent Batts <vbatts@redhat.com>

Vincent Batts authored on 2015/09/16 03:28:22
Showing 1 changed files
... ...
@@ -45,19 +45,17 @@ func (e *Events) Evict(l chan interface{}) {
45 45
 // Log broadcasts event to listeners. Each listener has 100 millisecond for
46 46
 // receiving event or it will be skipped.
47 47
 func (e *Events) Log(action, id, from string) {
48
-	go func() {
49
-		e.mu.Lock()
50
-		jm := &jsonmessage.JSONMessage{Status: action, ID: id, From: from, Time: time.Now().UTC().Unix()}
51
-		if len(e.events) == cap(e.events) {
52
-			// discard oldest event
53
-			copy(e.events, e.events[1:])
54
-			e.events[len(e.events)-1] = jm
55
-		} else {
56
-			e.events = append(e.events, jm)
57
-		}
58
-		e.mu.Unlock()
59
-		e.pub.Publish(jm)
60
-	}()
48
+	jm := &jsonmessage.JSONMessage{Status: action, ID: id, From: from, Time: time.Now().UTC().Unix()}
49
+	e.mu.Lock()
50
+	if len(e.events) == cap(e.events) {
51
+		// discard oldest event
52
+		copy(e.events, e.events[1:])
53
+		e.events[len(e.events)-1] = jm
54
+	} else {
55
+		e.events = append(e.events, jm)
56
+	}
57
+	e.mu.Unlock()
58
+	e.pub.Publish(jm)
61 59
 }
62 60
 
63 61
 // SubscribersCount returns number of event listeners