From: Kay Sievers Date: Wed, 8 Jan 2014 13:32:37 +0000 (+0800) Subject: bus-driverd: do not track identical matches X-Git-Tag: v209~498 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=234e28aa1cd37dee597c719ac5ca004c6215d28c;hp=743e7e5242b72dac182b4c15ff3a48be83277ece bus-driverd: do not track identical matches Identical matches are only one time in the hash map but multiple times in the list; when removing, the hash will be empty but the list still has entries. Not adding dupicates to the list should keep us in sync and prevent hitting the assert. --- diff --git a/src/bus-driverd/bus-driverd.c b/src/bus-driverd/bus-driverd.c index 7e0ad1e0c..46a5b1097 100644 --- a/src/bus-driverd/bus-driverd.c +++ b/src/bus-driverd/bus-driverd.c @@ -130,7 +130,10 @@ static int match_new(Client *c, struct bus_match_component *components, unsigned first = hashmap_get(c->matches, m->match); LIST_PREPEND(matches, first, m); r = hashmap_replace(c->matches, m->match, first); - if (r < 0) { + if (r == 0) { + log_debug("Match '%s' already installed, ignoring request.", m->match); + LIST_REMOVE(matches, first, m); + } else if (r < 0) { LIST_REMOVE(matches, first, m); goto fail; }