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.
This commit is contained in:
Kay Sievers
2014-01-08 21:38:20 +08:00
parent 743e7e5242
commit 234e28aa1c
+4 -1
View File
@@ -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;
}