@@ -64,14 +64,25 @@ namespace libp2p::peer {
6464 return false ;
6565 }
6666
67+ Clock::time_point InmemAddressRepository::calculateExpirationTime (
68+ const Milliseconds &ttl) const {
69+ static const auto max_time = Clock::time_point::max ();
70+ const auto now = Clock::now ();
71+ if (now >= max_time - ttl) {
72+ return max_time;
73+ }
74+ return now + ttl;
75+ }
76+
6777 outcome::result<bool > InmemAddressRepository::addAddresses (
6878 const PeerId &p,
6979 std::span<const multi::Multiaddress> ma,
7080 AddressRepository::Milliseconds ttl) {
7181 bool added = false ;
7282 auto &addresses = db_[p];
7383
74- auto expires_at = Clock::now () + ttl;
84+ auto expires_at = calculateExpirationTime (ttl);
85+
7586 for (const auto &m : ma) {
7687 if (addresses.expires .emplace (m, expires_at).second ) {
7788 addresses.order .emplace_back (m);
@@ -90,7 +101,8 @@ namespace libp2p::peer {
90101 bool added = false ;
91102 auto &addresses = db_[p];
92103
93- auto expires_at = Clock::now () + ttl;
104+ auto expires_at = calculateExpirationTime (ttl);
105+
94106 for (const auto &m : ma) {
95107 auto [addr_it, emplaced] = addresses.expires .emplace (m, expires_at);
96108 if (emplaced) {
@@ -113,7 +125,8 @@ namespace libp2p::peer {
113125 }
114126 auto &addresses = peer_it->second ;
115127
116- auto expires_at = Clock::now () + ttl;
128+ auto expires_at = calculateExpirationTime (ttl);
129+
117130 for (auto &item : addresses.expires ) {
118131 item.second = expires_at;
119132 }
0 commit comments