@@ -115,7 +115,7 @@ pub struct Miner {
115115 mem_pool : Arc < RwLock < MemPool > > ,
116116 next_allowed_reseal : NextAllowedReseal ,
117117 next_mandatory_reseal : NextMandatoryReseal ,
118- sealing_block_last_request : Mutex < u64 > ,
118+ sealing_block_last_request : SealingBlockLastRequest ,
119119 sealing_work : Mutex < SealingWork > ,
120120 params : Params ,
121121 engine : Arc < dyn CodeChainEngine > ,
@@ -129,6 +129,30 @@ pub struct Miner {
129129 immune_users : RwLock < HashSet < Address > > ,
130130}
131131
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+
132156type NextAllowedReseal = NextMandatoryReseal ;
133157
134158struct NextMandatoryReseal {
@@ -218,7 +242,7 @@ impl Miner {
218242 next_allowed_reseal : NextAllowedReseal :: new ( Instant :: now ( ) ) ,
219243 next_mandatory_reseal : NextMandatoryReseal :: new ( Instant :: now ( ) + options. reseal_max_period ) ,
220244 params : Params :: new ( AuthoringParams :: default ( ) ) ,
221- sealing_block_last_request : Mutex :: new ( 0 ) ,
245+ sealing_block_last_request : SealingBlockLastRequest :: new ( ) ,
222246 sealing_work : Mutex :: new ( SealingWork {
223247 queue : SealingQueue :: new ( options. work_queue_size ) ,
224248 enabled : options. force_sealing || scheme. engine . seals_internally ( ) . is_some ( ) ,
@@ -262,7 +286,7 @@ impl Miner {
262286 let mut sealing_work = self . sealing_work . lock ( ) ;
263287 if sealing_work. enabled {
264288 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 ( ) ;
266290 let should_disable_sealing = !self . options . force_sealing
267291 && !has_local_transactions
268292 && self . engine . seals_internally ( ) . is_none ( )
@@ -889,16 +913,16 @@ impl MinerService for Miner {
889913 }
890914 }
891915 }
892- let mut sealing_block_last_request = self . sealing_block_last_request . lock ( ) ;
916+
893917 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 {
895920 ctrace ! (
896921 MINER ,
897922 "prepare_work_sealing: Miner received request (was {}, now {}) - waking up." ,
898- * sealing_block_last_request ,
923+ prev_request ,
899924 best_number
900925 ) ;
901- * sealing_block_last_request = best_number;
902926 }
903927
904928 // Return if we restarted
0 commit comments