Ensure 64-bit alignment of ConnStats fields

Fixes #262.
This commit is contained in:
Matt Joiner 2018-06-23 18:33:56 +10:00
parent fefeef4ee9
commit 159c4a0e28
3 changed files with 9 additions and 6 deletions

View File

@ -39,6 +39,9 @@ import (
// Clients contain zero or more Torrents. A Client manages a blocklist, the
// TCP/UDP protocol ports, and DHT as desired.
type Client struct {
// An aggregate of stats over all connections. First in struct to ensure
// 64-bit alignment of fields. See #262.
stats ConnStats
mu sync.RWMutex
event sync.Cond
closed missinggo.Event
@ -62,8 +65,6 @@ type Client struct {
dopplegangerAddrs map[string]struct{}
badPeerIPs map[string]struct{}
torrents map[metainfo.Hash]*Torrent
// An aggregate of stats over all connections.
stats ConnStats
acceptLimiter map[ipStr]int
}

View File

@ -38,6 +38,9 @@ const (
// Maintains the state of a connection with a peer.
type connection struct {
// First to ensure 64-bit alignment for atomics. See #262.
stats ConnStats
t *Torrent
// The actual Conn, used for closing, and setting socket options.
conn net.Conn
@ -55,8 +58,6 @@ type connection struct {
// other ConnStat instances as determined when the *Torrent became known.
reconciledHandshakeStats bool
stats ConnStats
lastMessageReceived time.Time
completedHandshake time.Time
lastUsefulChunkReceived time.Time

View File

@ -45,6 +45,9 @@ type peersKey struct {
// Maintains state of torrent within a Client.
type Torrent struct {
// Torrent-level aggregate statistics. First in struct to ensure 64-bit
// alignment. See #262.
stats ConnStats
cl *Client
logger *log.Logger
@ -134,8 +137,6 @@ type Torrent struct {
// These "inclinations" are used to give connections preference for
// different pieces.
connPieceInclinationPool sync.Pool
// Torrent-level statistics.
stats ConnStats
// Count of each request across active connections.
pendingRequests map[request]int