@@ -23,7 +23,7 @@ import (
2323 "fmt"
2424 "net"
2525 "sort"
26- "sync/atomic "
26+ "sync"
2727 "time"
2828
2929 "google.golang.org/grpc"
@@ -168,7 +168,9 @@ type versionServer struct {
168168type walletServer struct {
169169 // ready indicates this service has been provided with all of its
170170 // dependencies and is ready to service requests.
171- ready atomic.Bool
171+ ready bool
172+ readyMtx sync.RWMutex
173+
172174 wallet * wallet.Wallet
173175 pb.UnimplementedWalletServiceServer
174176}
@@ -193,7 +195,9 @@ type seedServer struct {
193195type accountMixerServer struct {
194196 // ready indicates this service has been provided with all of its
195197 // dependencies and is ready to service requests.
196- ready atomic.Bool
198+ ready bool
199+ readyMtx sync.RWMutex
200+
197201 wallet * wallet.Wallet
198202 pb.UnimplementedAccountMixerServiceServer
199203}
@@ -203,7 +207,9 @@ type accountMixerServer struct {
203207type ticketbuyerServer struct {
204208 // ready indicates this service has been provided with all of its
205209 // dependencies and is ready to service requests.
206- ready atomic.Bool
210+ ready bool
211+ readyMtx sync.RWMutex
212+
207213 wallet * wallet.Wallet
208214 pb.UnimplementedTicketBuyerServiceServer
209215}
@@ -216,7 +222,9 @@ type agendaServer struct {
216222type votingServer struct {
217223 // ready indicates this service has been provided with all of its
218224 // dependencies and is ready to service requests.
219- ready atomic.Bool
225+ ready bool
226+ readyMtx sync.RWMutex
227+
220228 wallet * wallet.Wallet
221229 pb.UnimplementedVotingServiceServer
222230}
@@ -238,7 +246,9 @@ type decodeMessageServer struct {
238246type networkServer struct {
239247 // ready indicates this service has been provided with all of its
240248 // dependencies and is ready to service requests.
241- ready atomic.Bool
249+ ready bool
250+ readyMtx sync.RWMutex
251+
242252 wallet * wallet.Wallet
243253 pb.UnimplementedNetworkServiceServer
244254}
@@ -320,14 +330,21 @@ func (*versionServer) Version(ctx context.Context, req *pb.VersionRequest) (*pb.
320330
321331// StartWalletService starts the WalletService.
322332func StartWalletService (wallet * wallet.Wallet ) {
323- if walletService .ready .Swap (true ) {
333+ walletService .readyMtx .Lock ()
334+ defer walletService .readyMtx .Unlock ()
335+
336+ if walletService .ready {
324337 panic ("service already started" )
325338 }
339+
340+ walletService .ready = true
326341 walletService .wallet = wallet
327342}
328343
329344func (s * walletServer ) checkReady () bool {
330- return s .ready .Load ()
345+ s .readyMtx .RLock ()
346+ defer s .readyMtx .RUnlock ()
347+ return s .ready
331348}
332349
333350// requireNetworkBackend checks whether the wallet has been associated with the
@@ -2510,10 +2527,15 @@ func StartWalletLoaderService(loader *loader.Loader, activeNet *netparams.Params
25102527
25112528// StartAccountMixerService starts the AccountMixerService.
25122529func StartAccountMixerService (wallet * wallet.Wallet ) {
2513- accountMixerService .wallet = wallet
2514- if accountMixerService .ready .Swap (true ) {
2530+ accountMixerService .readyMtx .Lock ()
2531+ defer accountMixerService .readyMtx .Unlock ()
2532+
2533+ if accountMixerService .ready {
25152534 panic ("service already started" )
25162535 }
2536+
2537+ accountMixerService .ready = true
2538+ accountMixerService .wallet = wallet
25172539}
25182540
25192541// RunAccountMixer starts the automatic account mixer for the service.
@@ -2555,15 +2577,22 @@ func (t *accountMixerServer) RunAccountMixer(req *pb.RunAccountMixerRequest, svr
25552577}
25562578
25572579func (t * accountMixerServer ) checkReady () bool {
2558- return t .ready .Load ()
2580+ t .readyMtx .RLock ()
2581+ defer t .readyMtx .RUnlock ()
2582+ return t .ready
25592583}
25602584
25612585// StartTicketBuyerService starts the TicketBuyerService.
25622586func StartTicketBuyerService (wallet * wallet.Wallet ) {
2563- ticketBuyerService .wallet = wallet
2564- if ticketBuyerService .ready .Swap (true ) {
2587+ ticketBuyerService .readyMtx .Lock ()
2588+ defer ticketBuyerService .readyMtx .Unlock ()
2589+
2590+ if ticketBuyerService .ready {
25652591 panic ("service already started" )
25662592 }
2593+
2594+ ticketBuyerService .ready = true
2595+ ticketBuyerService .wallet = wallet
25672596}
25682597
25692598// RunTicketBuyer starts the automatic ticket buyer.
@@ -2668,7 +2697,9 @@ func (t *ticketbuyerServer) RunTicketBuyer(req *pb.RunTicketBuyerRequest, svr pb
26682697}
26692698
26702699func (t * ticketbuyerServer ) checkReady () bool {
2671- return t .ready .Load ()
2700+ t .readyMtx .RLock ()
2701+ defer t .readyMtx .RUnlock ()
2702+ return t .ready
26722703}
26732704
26742705func (s * loaderServer ) CreateWallet (ctx context.Context , req * pb.CreateWalletRequest ) (
@@ -3208,14 +3239,21 @@ func (s *agendaServer) Agendas(ctx context.Context, req *pb.AgendasRequest) (*pb
32083239
32093240// StartVotingService starts the VotingService.
32103241func StartVotingService (wallet * wallet.Wallet ) {
3211- votingService .wallet = wallet
3212- if votingService .ready .Swap (true ) {
3242+ votingService .readyMtx .Lock ()
3243+ defer votingService .readyMtx .Unlock ()
3244+
3245+ if votingService .ready {
32133246 panic ("service already started" )
32143247 }
3248+
3249+ votingService .ready = true
3250+ votingService .wallet = wallet
32153251}
32163252
32173253func (s * votingServer ) checkReady () bool {
3218- return s .ready .Load ()
3254+ s .readyMtx .RLock ()
3255+ defer s .readyMtx .RUnlock ()
3256+ return s .ready
32193257}
32203258
32213259func (s * votingServer ) VoteChoices (ctx context.Context , req * pb.VoteChoicesRequest ) (* pb.VoteChoicesResponse , error ) {
@@ -3748,14 +3786,21 @@ func (s *walletServer) AbandonTransaction(ctx context.Context, req *pb.AbandonTr
37483786
37493787// StartNetworkService starts the NetworkService.
37503788func StartNetworkService (wallet * wallet.Wallet ) {
3751- networkService .wallet = wallet
3752- if networkService .ready .Swap (true ) {
3789+ networkService .readyMtx .Lock ()
3790+ defer networkService .readyMtx .Unlock ()
3791+
3792+ if networkService .ready {
37533793 panic ("service already started" )
37543794 }
3795+
3796+ networkService .ready = true
3797+ networkService .wallet = wallet
37553798}
37563799
37573800func (s * networkServer ) checkReady () bool {
3758- return s .ready .Load ()
3801+ s .readyMtx .RLock ()
3802+ defer s .readyMtx .RUnlock ()
3803+ return s .ready
37593804}
37603805
37613806func (s * networkServer ) GetRawBlock (ctx context.Context , req * pb.GetRawBlockRequest ) (* pb.GetRawBlockResponse , error ) {
0 commit comments