Fixed inconsistency and also potential data race in weave/vendor/github.com/gogo/protobuf/proto/table_unmarshal.go:
u.reqFields is read/written 4 times in weave/vendor/github.com/gogo/protobuf/proto/table_unmarshal.go; 3 out of 4 times it is protected by u.lock; 1 out of 4 times it is read without a Lock, which is in func unmarshal() on L260.
A data race may happen when unmarshal() and other func computeUnmarshalInfo() are called in parallel.
In order to avoid potential data race here, I use u.lock.RLock(); defer u.lock.RUnlock() to make sure that all usages of items is in critical section.
Fixed inconsistency and also potential data race in weave/vendor/github.com/gogo/protobuf/proto/table_unmarshal.go: u.reqFields is read/written 4 times in weave/vendor/github.com/gogo/protobuf/proto/table_unmarshal.go; 3 out of 4 times it is protected by u.lock; 1 out of 4 times it is read without a Lock, which is in func unmarshal() on L260. A data race may happen when unmarshal() and other func computeUnmarshalInfo() are called in parallel.
In order to avoid potential data race here, I use u.lock.RLock(); defer u.lock.RUnlock() to make sure that all usages of items is in critical section.