Bug #4770
Updated by Ashlesh Gawande about 6 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) 6) Segment fetcher hangs while trying to re-erase the entry already erased in 5) by using an invalid iterator to erase from pending interest map ([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). 4). Short term solution is to set useConstantInterestTimeout to true so that segment fetcher will not send interests before actual timeout.