in swim/memberlist.go [170:191]
func (m *memberlist) RemoveMember(address string) bool {
m.members.Lock()
member, hasMember := m.members.byAddress[address]
if hasMember {
delete(m.members.byAddress, address)
for i, lMember := range m.members.list {
if member == lMember {
// a safe way to remove a pointer from a slice
m.members.list, m.members.list[len(m.members.list)-1] = append(m.members.list[:i], m.members.list[i+1:]...), nil
break
}
}
}
m.members.Unlock()
if hasMember {
// if we changed the membership recompute the actual checksum
m.ComputeChecksum()
}
return hasMember
}