p2p: Cache inbound flag on Peer.isInbound to avoid a race
This commit is contained in:
parent
399aa710d5
commit
dcca66bce8
26
p2p/peer.go
26
p2p/peer.go
@ -95,10 +95,11 @@ type PeerEvent struct {
|
|||||||
|
|
||||||
// Peer represents a connected remote node.
|
// Peer represents a connected remote node.
|
||||||
type Peer struct {
|
type Peer struct {
|
||||||
rw *conn
|
rw *conn
|
||||||
running map[string]*protoRW
|
isInbound bool // Cached from rw.flags to avoid a race condition
|
||||||
log log.Logger
|
running map[string]*protoRW
|
||||||
created mclock.AbsTime
|
log log.Logger
|
||||||
|
created mclock.AbsTime
|
||||||
|
|
||||||
wg sync.WaitGroup
|
wg sync.WaitGroup
|
||||||
protoErr chan error
|
protoErr chan error
|
||||||
@ -160,19 +161,20 @@ func (p *Peer) String() string {
|
|||||||
|
|
||||||
// Inbound returns true if the peer is an inbound connection
|
// Inbound returns true if the peer is an inbound connection
|
||||||
func (p *Peer) Inbound() bool {
|
func (p *Peer) Inbound() bool {
|
||||||
return p.rw.flags&inboundConn != 0
|
return p.isInbound
|
||||||
}
|
}
|
||||||
|
|
||||||
func newPeer(conn *conn, protocols []Protocol) *Peer {
|
func newPeer(conn *conn, protocols []Protocol) *Peer {
|
||||||
protomap := matchProtocols(protocols, conn.caps, conn)
|
protomap := matchProtocols(protocols, conn.caps, conn)
|
||||||
p := &Peer{
|
p := &Peer{
|
||||||
rw: conn,
|
rw: conn,
|
||||||
running: protomap,
|
isInbound: conn.is(inboundConn),
|
||||||
created: mclock.Now(),
|
running: protomap,
|
||||||
disc: make(chan DiscReason),
|
created: mclock.Now(),
|
||||||
protoErr: make(chan error, len(protomap)+1), // protocols + pingLoop
|
disc: make(chan DiscReason),
|
||||||
closed: make(chan struct{}),
|
protoErr: make(chan error, len(protomap)+1), // protocols + pingLoop
|
||||||
log: log.New("id", conn.id, "conn", conn.flags),
|
closed: make(chan struct{}),
|
||||||
|
log: log.New("id", conn.id, "conn", conn.flags),
|
||||||
}
|
}
|
||||||
return p
|
return p
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user