浏览代码

chore(stdiscosrv): properly clean out old addresses from memory

Jakob Borg 1 年之前
父节点
当前提交
ce1e259bb4
共有 1 个文件被更改,包括 12 次插入1 次删除
  1. 12 1
      cmd/stdiscosrv/database.go

+ 12 - 1
cmd/stdiscosrv/database.go

@@ -169,8 +169,16 @@ func (s *inMemoryStore) calculateStatistics() {
 		n++
 
 		addresses := expire(rec.Addresses, now)
+		if len(addresses) == 0 {
+			rec.Addresses = nil
+			s.m.Store(key, rec)
+		} else if len(addresses) != len(rec.Addresses) {
+			rec.Addresses = addresses
+			s.m.Store(key, rec)
+		}
+
 		switch {
-		case len(addresses) > 0:
+		case len(rec.Addresses) > 0:
 			current++
 			seenIPv4, seenIPv6, seenIPv6GUA := false, false, false
 			for _, addr := range rec.Addresses {
@@ -428,6 +436,9 @@ func expire(addrs []DatabaseAddress, now time.Time) []DatabaseAddress {
 			naddrs = append(naddrs, addrs[i])
 		}
 	}
+	if len(naddrs) == 0 {
+		return nil
+	}
 	return naddrs
 }