@@ -1053,7 +1053,14 @@ where
10531053 . store
10541054 . providers ( & key)
10551055 . into_iter ( )
1056- . filter ( |p| !p. is_expired ( Instant :: now ( ) ) )
1056+ . filter ( |p| {
1057+ if p. is_expired ( Instant :: now ( ) ) {
1058+ self . store . remove_provider ( & key, & p. provider ) ;
1059+ false
1060+ } else {
1061+ true
1062+ }
1063+ } )
10571064 . map ( |p| p. provider )
10581065 . collect ( ) ;
10591066
@@ -1220,19 +1227,19 @@ where
12201227
12211228 /// Collects all peers who are known to be providers of the value for a given `Multihash`.
12221229 fn provider_peers ( & mut self , key : & record:: Key , source : & PeerId ) -> Vec < KadPeer > {
1223- let kbuckets = & mut self . kbuckets ;
1224- let connected = & mut self . connected_peers ;
1225- let listen_addresses = & self . listen_addresses ;
1226- let external_addresses = & self . external_addresses ;
1227-
12281230 self . store
12291231 . providers ( key)
12301232 . into_iter ( )
1231- . filter_map ( move |p| {
1233+ . filter_map ( |p| {
1234+ if p. is_expired ( Instant :: now ( ) ) {
1235+ self . store . remove_provider ( key, & p. provider ) ;
1236+ return None ;
1237+ }
1238+
12321239 if & p. provider != source {
12331240 let node_id = p. provider ;
12341241 let multiaddrs = p. addresses ;
1235- let connection_ty = if connected . contains ( & node_id) {
1242+ let connection_ty = if self . connected_peers . contains ( & node_id) {
12361243 ConnectionType :: Connected
12371244 } else {
12381245 ConnectionType :: NotConnected
@@ -1244,17 +1251,17 @@ where
12441251 // try to find addresses in the routing table, as was
12451252 // done before provider records were stored along with
12461253 // their addresses.
1247- if & node_id == kbuckets. local_key ( ) . preimage ( ) {
1254+ if & node_id == self . kbuckets . local_key ( ) . preimage ( ) {
12481255 Some (
1249- listen_addresses
1256+ self . listen_addresses
12501257 . iter ( )
1251- . chain ( external_addresses. iter ( ) )
1258+ . chain ( self . external_addresses . iter ( ) )
12521259 . cloned ( )
12531260 . collect :: < Vec < _ > > ( ) ,
12541261 )
12551262 } else {
12561263 let key = kbucket:: Key :: from ( node_id) ;
1257- kbuckets
1264+ self . kbuckets
12581265 . entry ( & key)
12591266 . as_mut ( )
12601267 . and_then ( |e| e. view ( ) )
0 commit comments