Make checker_put() and prio_put() idempotent
authorHannes Reinecke <hare@suse.de>
Fri, 11 Apr 2014 06:10:36 +0000 (08:10 +0200)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Sun, 29 Mar 2015 15:49:58 +0000 (17:49 +0200)
checker_put() and prio_put() should check whether an instance
was selected prior to dropping a reference to it.
Otherwise they'll be dropping a reference which they haven't
increased in the first place.

Signed-off-by: Hannes Reinecke <hare@suse.de>
libmultipath/checkers.c
libmultipath/prio.c

index 1dd5525..ef1d099 100644 (file)
@@ -195,7 +195,7 @@ void checker_put (struct checker * dst)
 {
        struct checker * src;
 
-       if (!dst)
+       if (!dst || !dst->check)
                return;
        src = checker_lookup(dst->name);
        if (dst->free)
index 6ee0b9c..ab8eca9 100644 (file)
@@ -132,7 +132,7 @@ int prio_getprio (struct prio * p, struct path * pp)
 
 int prio_selected (struct prio * p)
 {
-       if (!p || !p->getprio)
+       if (!p)
                return 0;
        return (p->getprio) ? 1 : 0;
 }
@@ -169,7 +169,7 @@ void prio_put (struct prio * dst)
 {
        struct prio * src;
 
-       if (!dst)
+       if (!dst || !dst->getprio)
                return;
 
        src = prio_lookup(dst->name);