@@ -93,7 +93,7 @@ func (status StatusReport) TimeSinceLastRound() time.Duration {
93
93
94
94
// AlgorandFullNode specifies and implements a full Algorand node.
95
95
type AlgorandFullNode struct {
96
- mu deadlock.RWMutex
96
+ mu deadlock.Mutex
97
97
ctx context.Context
98
98
cancelCtx context.CancelFunc
99
99
config config.Local
@@ -784,16 +784,17 @@ func ensureParticipationDB(genesisDir string, log logging.Logger) (account.Parti
784
784
// Reload participation keys from disk periodically
785
785
func (node * AlgorandFullNode ) checkForParticipationKeys () {
786
786
defer node .monitoringRoutinesWaitGroup .Done ()
787
+ done := node .ctx .Done ()
787
788
ticker := time .NewTicker (node .config .ParticipationKeysRefreshInterval )
789
+ defer ticker .Stop ()
788
790
for {
789
791
select {
790
792
case <- ticker .C :
791
793
err := node .loadParticipationKeys ()
792
794
if err != nil {
793
795
node .log .Errorf ("Could not refresh participation keys: %v" , err )
794
796
}
795
- case <- node .ctx .Done ():
796
- ticker .Stop ()
797
+ case <- done :
797
798
return
798
799
}
799
800
}
@@ -1034,12 +1035,10 @@ var txPoolGuage = metrics.MakeGauge(metrics.MetricName{Name: "algod_tx_pool_coun
1034
1035
1035
1036
func (node * AlgorandFullNode ) txPoolGaugeThread () {
1036
1037
defer node .monitoringRoutinesWaitGroup .Done ()
1038
+ done := node .ctx .Done ()
1037
1039
ticker := time .NewTicker (10 * time .Second )
1038
1040
defer ticker .Stop ()
1039
1041
for true {
1040
- node .mu .RLock ()
1041
- done := node .ctx .Done ()
1042
- node .mu .RUnlock ()
1043
1042
select {
1044
1043
case <- ticker .C :
1045
1044
txPoolGuage .Set (float64 (node .transactionPool .PendingCount ()), nil )
@@ -1075,11 +1074,9 @@ func (node *AlgorandFullNode) OnNewBlock(block bookkeeping.Block, delta ledgerco
1075
1074
// It runs in a separate thread so that, during catchup, we
1076
1075
// don't have to delete key for each block we received.
1077
1076
func (node * AlgorandFullNode ) oldKeyDeletionThread () {
1077
+ done := node .ctx .Done ()
1078
1078
defer node .monitoringRoutinesWaitGroup .Done ()
1079
1079
for {
1080
- node .mu .RLock ()
1081
- done := node .ctx .Done ()
1082
- node .mu .RUnlock ()
1083
1080
select {
1084
1081
case <- done :
1085
1082
return
0 commit comments