在不加锁的情况下删除某个Item 将会被别的方法引用,切记不能加锁
(itemId uint64)
| 307 | // 在不加锁的情况下删除某个Item |
| 308 | // 将会被别的方法引用,切记不能加锁 |
| 309 | func (this *IPList) deleteItem(itemId uint64) { |
| 310 | // 从buffer中删除 |
| 311 | delete(this.bufferItemsMap, itemId) |
| 312 | |
| 313 | // 从all items中删除 |
| 314 | _, ok := this.allItemsMap[itemId] |
| 315 | if ok { |
| 316 | delete(this.allItemsMap, itemId) |
| 317 | } |
| 318 | |
| 319 | // 检查是否存在 |
| 320 | oldItem, existsOld := this.itemsMap[itemId] |
| 321 | if !existsOld { |
| 322 | return |
| 323 | } |
| 324 | |
| 325 | // 从ipMap中删除 |
| 326 | if IsZero(oldItem.IPTo) { |
| 327 | var ipHex = ToHex(oldItem.IPFrom) |
| 328 | ipItem, ok := this.ipMap[ipHex] |
| 329 | if ok && ipItem.Id == itemId { |
| 330 | delete(this.ipMap, ipHex) |
| 331 | } |
| 332 | } |
| 333 | |
| 334 | delete(this.itemsMap, itemId) |
| 335 | |
| 336 | // 删除排序中的Item |
| 337 | if !IsZero(oldItem.IPTo) { |
| 338 | var index = -1 |
| 339 | for itemIndex, item := range this.sortedRangeItems { |
| 340 | if item.Id == itemId { |
| 341 | index = itemIndex |
| 342 | break |
| 343 | } |
| 344 | } |
| 345 | if index >= 0 { |
| 346 | copy(this.sortedRangeItems[index:], this.sortedRangeItems[index+1:]) |
| 347 | this.sortedRangeItems = this.sortedRangeItems[:len(this.sortedRangeItems)-1] |
| 348 | } |
| 349 | } |
| 350 | } |