Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 25f9977

Browse files
authored
les: use atomic type (ethereum#27168)
1 parent f8aa623 commit 25f9977

File tree

5 files changed

+21
-25
lines changed

5 files changed

+21
-25
lines changed

les/client_handler.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import (
2121
"math/big"
2222
"math/rand"
2323
"sync"
24-
"sync/atomic"
2524
"time"
2625

2726
"github.com/ethereum/go-ethereum/common"
@@ -144,8 +143,8 @@ func (h *clientHandler) handle(p *serverPeer, noInitAnnounce bool) error {
144143
}
145144

146145
// Mark the peer starts to be served.
147-
atomic.StoreUint32(&p.serving, 1)
148-
defer atomic.StoreUint32(&p.serving, 0)
146+
p.serving.Store(true)
147+
defer p.serving.Store(false)
149148

150149
// Spawn a main loop to handle all incoming messages.
151150
for {

les/peer.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -121,13 +121,13 @@ type peerCommons struct {
121121
*p2p.Peer
122122
rw p2p.MsgReadWriter
123123

124-
id string // Peer identity.
125-
version int // Protocol version negotiated.
126-
network uint64 // Network ID being on.
127-
frozen uint32 // Flag whether the peer is frozen.
128-
announceType uint64 // New block announcement type.
129-
serving uint32 // The status indicates the peer is served.
130-
headInfo blockInfo // Last announced block information.
124+
id string // Peer identity.
125+
version int // Protocol version negotiated.
126+
network uint64 // Network ID being on.
127+
frozen atomic.Bool // Flag whether the peer is frozen.
128+
announceType uint64 // New block announcement type.
129+
serving atomic.Bool // The status indicates the peer is served.
130+
headInfo blockInfo // Last announced block information.
131131

132132
// Background task queue for caching peer tasks and executing in order.
133133
sendQueue *utils.ExecQueue
@@ -143,7 +143,7 @@ type peerCommons struct {
143143
// isFrozen returns true if the client is frozen or the server has put our
144144
// client in frozen state
145145
func (p *peerCommons) isFrozen() bool {
146-
return atomic.LoadUint32(&p.frozen) != 0
146+
return p.frozen.Load()
147147
}
148148

149149
// canQueue returns an indicator whether the peer can queue an operation.
@@ -398,15 +398,15 @@ func (p *serverPeer) rejectUpdate(size uint64) bool {
398398
// freeze processes Stop messages from the given server and set the status as
399399
// frozen.
400400
func (p *serverPeer) freeze() {
401-
if atomic.CompareAndSwapUint32(&p.frozen, 0, 1) {
401+
if p.frozen.CompareAndSwap(false, true) {
402402
p.sendQueue.Clear()
403403
}
404404
}
405405

406406
// unfreeze processes Resume messages from the given server and set the status
407407
// as unfrozen.
408408
func (p *serverPeer) unfreeze() {
409-
atomic.StoreUint32(&p.frozen, 0)
409+
p.frozen.Store(false)
410410
}
411411

412412
// sendRequest send a request to the server based on the given message type
@@ -823,11 +823,11 @@ func (p *clientPeer) freeze() {
823823
if p.version < lpv3 {
824824
// if Stop/Resume is not supported then just drop the peer after setting
825825
// its frozen status permanently
826-
atomic.StoreUint32(&p.frozen, 1)
826+
p.frozen.Store(true)
827827
p.Peer.Disconnect(p2p.DiscUselessPeer)
828828
return
829829
}
830-
if atomic.SwapUint32(&p.frozen, 1) == 0 {
830+
if !p.frozen.Swap(true) {
831831
go func() {
832832
p.sendStop()
833833
time.Sleep(freezeTimeBase + time.Duration(rand.Int63n(int64(freezeTimeRandom))))
@@ -840,7 +840,7 @@ func (p *clientPeer) freeze() {
840840
time.Sleep(freezeCheckPeriod)
841841
continue
842842
}
843-
atomic.StoreUint32(&p.frozen, 0)
843+
p.frozen.Store(false)
844844
p.sendResume(bufValue)
845845
return
846846
}

les/server_handler.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ package les
1919
import (
2020
"errors"
2121
"sync"
22-
"sync/atomic"
2322
"time"
2423

2524
"github.com/ethereum/go-ethereum/common"
@@ -164,8 +163,8 @@ func (h *serverHandler) handle(p *clientPeer) error {
164163
}()
165164

166165
// Mark the peer as being served.
167-
atomic.StoreUint32(&p.serving, 1)
168-
defer atomic.StoreUint32(&p.serving, 0)
166+
p.serving.Store(true)
167+
defer p.serving.Store(false)
169168

170169
// Spawn a main loop to handle all incoming messages.
171170
for {

les/test_helper.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
"crypto/rand"
2626
"fmt"
2727
"math/big"
28-
"sync/atomic"
2928
"testing"
3029
"time"
3130

@@ -380,7 +379,7 @@ func newTestPeerPair(name string, version int, server *serverHandler, client *cl
380379
return nil, nil, fmt.Errorf("failed to establish protocol connection %v", err)
381380
default:
382381
}
383-
if atomic.LoadUint32(&peer1.serving) == 1 && atomic.LoadUint32(&peer2.serving) == 1 {
382+
if peer1.serving.Load() && peer2.serving.Load() {
384383
break
385384
}
386385
time.Sleep(50 * time.Millisecond)
@@ -441,7 +440,7 @@ func (client *testClient) newRawPeer(t *testing.T, name string, version int, rec
441440
return nil, nil, nil
442441
default:
443442
}
444-
if atomic.LoadUint32(&peer.serving) == 1 {
443+
if peer.serving.Load() {
445444
break
446445
}
447446
time.Sleep(50 * time.Millisecond)
@@ -505,7 +504,7 @@ func (server *testServer) newRawPeer(t *testing.T, name string, version int) (*t
505504
return nil, nil, nil
506505
default:
507506
}
508-
if atomic.LoadUint32(&peer.serving) == 1 {
507+
if peer.serving.Load() {
509508
break
510509
}
511510
time.Sleep(50 * time.Millisecond)

les/ulc_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
"crypto/rand"
2121
"fmt"
2222
"net"
23-
"sync/atomic"
2423
"testing"
2524
"time"
2625

@@ -136,7 +135,7 @@ func connect(server *serverHandler, serverId enode.ID, client *clientHandler, pr
136135
return nil, nil, fmt.Errorf("failed to establish protocol connection %v", err)
137136
default:
138137
}
139-
if atomic.LoadUint32(&peer1.serving) == 1 && atomic.LoadUint32(&peer2.serving) == 1 {
138+
if peer1.serving.Load() && peer2.serving.Load() {
140139
break
141140
}
142141
time.Sleep(50 * time.Millisecond)

0 commit comments

Comments
 (0)