fabiolb / fabio

Consul Load-Balancing made simple
https://fabiolb.net
MIT License
7.25k stars 620 forks source link

trace: protect field access with lock to avoid possible data race #926

Open yanke-xu opened 1 year ago

yanke-xu commented 1 year ago

Fixed inconsistency and also potential data race in trace/events.go: el.discarded is read/written 5 times in trace/events.go; 4 out of 5 times it is protected by el.mu.Lock(); 1 out of 5 times it is write without a Lock, which is in func reset() on L280. A data race may happen when reset() and other func like Stop() which cotains operation about el.discarded are called in parallel.

In order to avoid potential data race here, I use el.mu.Lock(); defer el.mu.Unlock() to make sure that all usages of items is in critical section.

I don't know whether it is accurate, so I 'm looking forward to your reply.