From: Lennart Poettering Date: Mon, 17 Dec 2018 17:43:11 +0000 (+0100) Subject: sd-lldp: accept if a neighbor is already removed from the hashtable X-Git-Tag: v240~27^2~4 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8ae1a821b36683fae6514dcd317a2049d0824779;p=platform%2Fupstream%2Fsystemd.git sd-lldp: accept if a neighbor is already removed from the hashtable --- diff --git a/src/libsystemd-network/lldp-neighbor.c b/src/libsystemd-network/lldp-neighbor.c index 199d8ae..43fc8e0 100644 --- a/src/libsystemd-network/lldp-neighbor.c +++ b/src/libsystemd-network/lldp-neighbor.c @@ -82,7 +82,12 @@ sd_lldp_neighbor *lldp_neighbor_unlink(sd_lldp_neighbor *n) { if (!n->lldp) return NULL; - assert_se(hashmap_remove(n->lldp->neighbor_by_id, &n->id) == n); + /* Only remove the neighbor object from the hash table if it's in there, don't complain if it isn't. This is + * because we are used as destructor call for hashmap_clear() and thus sometimes are called to de-register + * ourselves from the hashtable and sometimes are called after we already are de-registered. */ + + (void) hashmap_remove_value(n->lldp->neighbor_by_id, &n->id, n); + assert_se(prioq_remove(n->lldp->neighbor_by_expiry, n, &n->prioq_idx) >= 0); n->lldp = NULL;