[systemd-commits] src/bus-driverd

Kay Sievers kay at kemper.freedesktop.org
Wed Jan 8 05:41:53 PST 2014


 src/bus-driverd/bus-driverd.c |    5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

New commits:
commit 234e28aa1cd37dee597c719ac5ca004c6215d28c
Author: Kay Sievers <kay at vrfy.org>
Date:   Wed Jan 8 21:32:37 2014 +0800

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



More information about the systemd-commits mailing list