Project

General

Profile

Bug #4770

Updated by Davide Pesavento over 5 years ago

1) Segment fetcher sends an interest with Nonce=1 
 2) After 1 second, segment fetcher sends another interest with same name with Nonce=2 
 3) Face gets data, satisfies interest with Nonce=1 
 4) Segment fetcher informs NLSR of the new data 
 5) Segment fetcher removes corresponding entry from from pending interest map 
 6) Face satisfies interest with Nonce=2 
 7) Segment fetcher hangs while trying to re-erase the entry already erased in 5) by using an invalid iterator ([here](https://github.com/named-data/ndn-cxx/blob/a3bf4319ed483a4a6fe2c96b79ec4491d7217f00/src/util/segment-fetcher.cpp#L286)) 

 See attached folder for reproduction on a small scale. Logs from consumer: 

 ``` 
 1541784024.347425 DEBUG: [ndn.Face] <I /example/testApp?ndn.MustBeFresh=true&ndn.Nonce=2593228152 
 1541784025.347404 DEBUG: [ndn.Face] <I /example/testApp?ndn.MustBeFresh=true&ndn.Nonce=1097587936 
 1541784025.350393 DEBUG: [ndn.Face] >D /example/testApp/%00%00 
 1541784025.350405 DEBUG: [ndn.Face]      satisfying /example/testApp?ndn.MustBeFresh=true&ndn.Nonce=2593228152 from app 
 1541784025.350436 DEBUG: [ndn.security.v2.Validator] > Start validating data /example/testApp/%00%00 
 1541784025.350441 TRACE: [ndn.security.v2.ValidationState] > Signature verification bypassed for data `/example/testApp/%00%00` 
 Got data 
 1541784025.350508 TRACE: [ndn.security.v2.ValidationState] ~ValidationState 
 1541784025.350520 DEBUG: [ndn.Face]      satisfying /example/testApp?ndn.MustBeFresh=true&ndn.Nonce=1097587936 from app 
 1541784025.350530 DEBUG: [ndn.security.v2.Validator] > Start validating data /example/testApp/%00%00 
 1541784025.350533 TRACE: [ndn.security.v2.ValidationState] > Signature verification bypassed for data `/example/testApp/%00%00 
 Hangs with 100% CPU usage. 
 ``` 

 This behaviour is not observed in latest ndn-cxx fetcher as the fetcher destroys itself after informing the application about the data on step 4 (see note1). 

 Workaround Short term solution is to set `useConstantInterestTimeout` useConstantInterestTimeout to true so that segment fetcher will not send interests before actual timeout.

Back