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>
| ... | ... |
@@ -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 |