@@ -64,10 +64,11 @@ type MH struct {
6464// New returns a new multihost with the given id.
6565func New (id string ) * MH {
6666 return & MH {
67- o : id ,
68- names : make ([]string , 0 ),
69- addrs : make ([]netip.AddrPort , 0 ),
70- mtime : time .Now (),
67+ o : id ,
68+ names : make ([]string , 0 ),
69+ addrs : make ([]netip.AddrPort , 0 ),
70+ preresolved : make ([]netip.AddrPort , 0 ),
71+ mtime : time .Now (),
7172 }
7273}
7374
@@ -254,28 +255,26 @@ func (h *MH) add(domainsOrIps []string, op MHAddOp) int {
254255 h .Lock ()
255256 defer h .Unlock ()
256257
257- if len (addrs ) > 0 {
258- if op == Reset {
259- if len (names ) > 0 {
260- h .names = names
261- h .addrs = addrs
262- }
263- if len (pre ) > 0 {
264- h .preresolved = pre
265- }
266- } else if op == Append {
267- if len (names ) > 0 {
268- h .names = append (h .names , names ... )
269- h .addrs = append (h .addrs , addrs ... )
270- }
271- if len (pre ) > 0 {
272- h .preresolved = append (h .preresolved , pre ... )
273- }
274- } else {
275- log .E ("multihost: %s add: %v => %v [+ %v]; unknown op %d" , id , names , addrs , pre , op )
276- return 0
258+ if op == Reset { // reset whatever is non-empty
259+ if len (names ) > 0 {
260+ h .names = names
261+ }
262+ if len (addrs ) > 0 {
263+ h .addrs = addrs
277264 }
265+ if len (pre ) > 0 {
266+ h .preresolved = pre
267+ }
268+ } else if op == Append {
269+ h .names = append (h .names , names ... )
270+ h .addrs = append (h .addrs , addrs ... )
271+ h .preresolved = append (h .preresolved , pre ... )
272+
273+ } else {
274+ log .E ("multihost: %s add: %v => %v [+ %v]; unknown op %d" , id , names , addrs , pre , op )
275+ return 0
278276 }
277+
279278 h .mtime = time .Now ()
280279 // remove dups from h.addrs and h.names
281280 h .uniqAddrsLocked ()
@@ -301,9 +300,9 @@ func resolv(id string, domainsOrIps []string) (names []string, pre []netip.AddrP
301300 names = append (names , ep ) // add hostname regardless of resolution success
302301 log .D ("multihost: %s resolving: %q" , id , ep )
303302 if resolvedips , err := dialers .Resolve (dip ); err == nil && len (resolvedips ) > 0 {
304- eps := addrport (port , resolvedips ... )
305- addrs = append (addrs , eps ... )
306- log .V ("multihost: %s resolved: %q => %s" , id , dip , eps )
303+ reps := addrport (port , resolvedips ... )
304+ addrs = append (addrs , reps ... )
305+ log .V ("multihost: %s resolved: %q => %s" , id , dip , reps )
307306 } else {
308307 // err may be nil even on zero answers
309308 err = core .OneErr (err , errNoIps )
0 commit comments