|
@@ -174,9 +174,13 @@ list_set_add(struct list_set *map, u32 i, ip_set_id_t id,
|
|
|
{
|
|
|
const struct set_elem *e = list_set_elem(map, i);
|
|
|
|
|
|
- if (i == map->size - 1 && e->id != IPSET_INVALID_ID)
|
|
|
- /* Last element replaced: e.g. add new,before,last */
|
|
|
- ip_set_put_byindex(e->id);
|
|
|
+ if (e->id != IPSET_INVALID_ID) {
|
|
|
+ const struct set_elem *x = list_set_elem(map, map->size - 1);
|
|
|
+
|
|
|
+ /* Last element replaced or pushed off */
|
|
|
+ if (x->id != IPSET_INVALID_ID)
|
|
|
+ ip_set_put_byindex(x->id);
|
|
|
+ }
|
|
|
if (with_timeout(map->timeout))
|
|
|
list_elem_tadd(map, i, id, ip_set_timeout_set(timeout));
|
|
|
else
|