chiark / gitweb /
bus-driverd: do not track identical matches
authorKay Sievers <kay@vrfy.org>
Wed, 8 Jan 2014 13:32:37 +0000 (21:32 +0800)
committerKay Sievers <kay@vrfy.org>
Wed, 8 Jan 2014 13:38:20 +0000 (21:38 +0800)
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.

src/bus-driverd/bus-driverd.c

index 7e0ad1e..46a5b10 100644 (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;
         }