@@ -20,7 +20,7 @@ use std::sync::Arc;
2020
2121use ctypes:: transaction:: ShardTransaction ;
2222use kvdb:: { DBTransaction , KeyValueDB } ;
23- use parking_lot:: RwLock ;
23+ use parking_lot:: { Mutex , RwLock } ;
2424use primitives:: { Bytes , H256 } ;
2525use rlp:: RlpStream ;
2626use rlp_compress:: { blocks_swapper, compress, decompress} ;
@@ -37,8 +37,8 @@ pub struct BodyDB {
3737 parcel_address_cache : RwLock < HashMap < H256 , TransactionAddress > > ,
3838 pending_parcel_addresses : RwLock < HashMap < H256 , Option < TransactionAddress > > > ,
3939
40- transaction_address_cache : RwLock < HashMap < H256 , TransactionAddresses > > ,
41- pending_transaction_addresses : RwLock < HashMap < H256 , Option < TransactionAddresses > > > ,
40+ transaction_address_cache : Mutex < HashMap < H256 , TransactionAddresses > > ,
41+ pending_transaction_addresses : Mutex < HashMap < H256 , Option < TransactionAddresses > > > ,
4242
4343 db : Arc < KeyValueDB > ,
4444}
@@ -53,8 +53,8 @@ impl BodyDB {
5353 parcel_address_cache : RwLock :: new ( HashMap :: new ( ) ) ,
5454 pending_parcel_addresses : RwLock :: new ( HashMap :: new ( ) ) ,
5555
56- transaction_address_cache : RwLock :: new ( HashMap :: new ( ) ) ,
57- pending_transaction_addresses : RwLock :: new ( HashMap :: new ( ) ) ,
56+ transaction_address_cache : Default :: default ( ) ,
57+ pending_transaction_addresses : Default :: default ( ) ,
5858
5959 db,
6060 } ;
@@ -88,7 +88,7 @@ impl BodyDB {
8888
8989 pub fn update_best_block ( & self , batch : & mut DBTransaction , best_block_changed : & BestBlockChanged ) {
9090 let mut pending_parcel_addresses = self . pending_parcel_addresses . write ( ) ;
91- let mut pending_transaction_addresses = self . pending_transaction_addresses . write ( ) ;
91+ let mut pending_transaction_addresses = self . pending_transaction_addresses . lock ( ) ;
9292 batch. extend_with_option_cache (
9393 db:: COL_EXTRA ,
9494 & mut * pending_parcel_addresses,
@@ -108,8 +108,8 @@ impl BodyDB {
108108 let mut parcel_address_cache = self . parcel_address_cache . write ( ) ;
109109 let mut pending_parcel_addresses = self . pending_parcel_addresses . write ( ) ;
110110
111- let mut transaction_address_cache = self . transaction_address_cache . write ( ) ;
112- let mut pending_transaction_addresses = self . pending_transaction_addresses . write ( ) ;
111+ let mut transaction_address_cache = self . transaction_address_cache . lock ( ) ;
112+ let mut pending_transaction_addresses = self . pending_transaction_addresses . lock ( ) ;
113113
114114 let new_parcels = mem:: replace ( & mut * pending_parcel_addresses, HashMap :: new ( ) ) ;
115115 let ( retracted_parcels, enacted_parcels) =
@@ -296,12 +296,12 @@ impl BodyProvider for BodyDB {
296296
297297 /// Get the address of parcel with given hash.
298298 fn transaction_address ( & self , hash : & H256 ) -> Option < TransactionAddress > {
299- let result = self . db . read_with_cache ( db:: COL_EXTRA , & self . parcel_address_cache , hash) ?;
299+ let result = self . db . read_with_cache ( db:: COL_EXTRA , & mut * self . parcel_address_cache . write ( ) , hash) ?;
300300 Some ( result)
301301 }
302302
303303 fn transaction_addresses_by_tracker ( & self , tracker : & H256 ) -> Option < TransactionAddresses > {
304- Some ( self . db . read_with_cache ( db:: COL_EXTRA , & self . transaction_address_cache , tracker) ?)
304+ Some ( self . db . read_with_cache ( db:: COL_EXTRA , & mut * self . transaction_address_cache . lock ( ) , tracker) ?)
305305 }
306306
307307 /// Get block body data
0 commit comments