()
| 174 | } |
| 175 | |
| 176 | func (p *VMPool) cleanExpired() { |
| 177 | now := time.Now() |
| 178 | p.mu.Lock() |
| 179 | removeCount := 0 |
| 180 | for removeCount < len(p.idle)-p.config.MinIdle && |
| 181 | now.Sub(p.idle[removeCount].returnedAt) >= p.config.IdleTime { |
| 182 | removeCount++ |
| 183 | } |
| 184 | if removeCount == 0 { |
| 185 | p.mu.Unlock() |
| 186 | return |
| 187 | } |
| 188 | expired := append([]idleVM(nil), p.idle[:removeCount]...) |
| 189 | copy(p.idle, p.idle[removeCount:]) |
| 190 | p.idle = p.idle[:len(p.idle)-removeCount] |
| 191 | p.total -= removeCount |
| 192 | p.signalLocked() |
| 193 | p.mu.Unlock() |
| 194 | |
| 195 | for _, item := range expired { |
| 196 | _ = item.vm.Dispose() |
| 197 | } |
| 198 | } |
| 199 | |
| 200 | func (p *VMPool) signalLocked() { |
| 201 | close(p.changed) |
no test coverage detected