Align atomic struct field for compatibility in 32-bit ABIs. (#7037)

The layout of struct fields means that interior fields may not be properly
aligned for 64-bit access.

Fixes #7000.
This commit is contained in:
M. J. Fromberger
2021-09-30 10:53:05 -07:00
committed by GitHub
parent 77052370cc
commit bdd815ebc9
+6 -1
View File
@@ -751,13 +751,18 @@ func (chDesc ChannelDescriptor) FillDefaults() (filled ChannelDescriptor) {
// TODO: lowercase.
// NOTE: not goroutine-safe.
type Channel struct {
// Exponential moving average.
// This field must be accessed atomically.
// It is first in the struct to ensure correct alignment.
// See https://github.com/tendermint/tendermint/issues/7000.
recentlySent int64
conn *MConnection
desc ChannelDescriptor
sendQueue chan []byte
sendQueueSize int32 // atomic.
recving []byte
sending []byte
recentlySent int64 // exponential moving average
maxPacketMsgPayloadSize int