@@ -115,7 +115,7 @@ pub struct Miner {
115
115
mem_pool : Arc < RwLock < MemPool > > ,
116
116
next_allowed_reseal : NextAllowedReseal ,
117
117
next_mandatory_reseal : NextMandatoryReseal ,
118
- sealing_block_last_request : Mutex < u64 > ,
118
+ sealing_block_last_request : SealingBlockLastRequest ,
119
119
sealing_work : Mutex < SealingWork > ,
120
120
params : Params ,
121
121
engine : Arc < dyn CodeChainEngine > ,
@@ -129,6 +129,30 @@ pub struct Miner {
129
129
immune_users : RwLock < HashSet < Address > > ,
130
130
}
131
131
132
+ struct SealingBlockLastRequest {
133
+ block_number : Mutex < u64 > ,
134
+ }
135
+
136
+ impl SealingBlockLastRequest {
137
+ pub fn new ( ) -> Self {
138
+ Self {
139
+ block_number : Mutex :: new ( 0 ) ,
140
+ }
141
+ }
142
+
143
+ pub fn get ( & self ) -> u64 {
144
+ * self . block_number . lock ( )
145
+ }
146
+
147
+ /// Returns previous value
148
+ pub fn set ( & self , block_number : u64 ) -> u64 {
149
+ let mut guard = self . block_number . lock ( ) ;
150
+ let prev = * guard;
151
+ * guard = block_number;
152
+ prev
153
+ }
154
+ }
155
+
132
156
type NextAllowedReseal = NextMandatoryReseal ;
133
157
134
158
struct NextMandatoryReseal {
@@ -218,7 +242,7 @@ impl Miner {
218
242
next_allowed_reseal : NextAllowedReseal :: new ( Instant :: now ( ) ) ,
219
243
next_mandatory_reseal : NextMandatoryReseal :: new ( Instant :: now ( ) + options. reseal_max_period ) ,
220
244
params : Params :: new ( AuthoringParams :: default ( ) ) ,
221
- sealing_block_last_request : Mutex :: new ( 0 ) ,
245
+ sealing_block_last_request : SealingBlockLastRequest :: new ( ) ,
222
246
sealing_work : Mutex :: new ( SealingWork {
223
247
queue : SealingQueue :: new ( options. work_queue_size ) ,
224
248
enabled : options. force_sealing || scheme. engine . seals_internally ( ) . is_some ( ) ,
@@ -262,7 +286,7 @@ impl Miner {
262
286
let mut sealing_work = self . sealing_work . lock ( ) ;
263
287
if sealing_work. enabled {
264
288
ctrace ! ( MINER , "requires_reseal: sealing enabled" ) ;
265
- let last_request = * self . sealing_block_last_request . lock ( ) ;
289
+ let last_request = self . sealing_block_last_request . get ( ) ;
266
290
let should_disable_sealing = !self . options . force_sealing
267
291
&& !has_local_transactions
268
292
&& self . engine . seals_internally ( ) . is_none ( )
@@ -889,16 +913,16 @@ impl MinerService for Miner {
889
913
}
890
914
}
891
915
}
892
- let mut sealing_block_last_request = self . sealing_block_last_request . lock ( ) ;
916
+
893
917
let best_number = client. chain_info ( ) . best_block_number ;
894
- if * sealing_block_last_request != best_number {
918
+ let prev_request = self . sealing_block_last_request . set ( best_number) ;
919
+ if prev_request != best_number {
895
920
ctrace ! (
896
921
MINER ,
897
922
"prepare_work_sealing: Miner received request (was {}, now {}) - waking up." ,
898
- * sealing_block_last_request ,
923
+ prev_request ,
899
924
best_number
900
925
) ;
901
- * sealing_block_last_request = best_number;
902
926
}
903
927
904
928
// Return if we restarted
0 commit comments