kmemleak: Do not report new leaked objects if the scanning was stopped
authorCatalin Marinas <catalin.marinas@arm.com>
Mon, 29 Jun 2009 16:13:56 +0000 (17:13 +0100)
committerCatalin Marinas <catalin.marinas@arm.com>
Mon, 29 Jun 2009 16:14:13 +0000 (17:14 +0100)
If the scanning was stopped with a signal, it is possible that some
objects are left with a white colour (potential leaks) and reported. Add
a check to avoid reporting such objects.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
mm/kmemleak.c

index c37e8e5..e094c4d 100644 (file)
@@ -1030,6 +1030,12 @@ static void kmemleak_scan(void)
        WARN_ON(!list_empty(&gray_list));
 
        /*
+        * If scanning was stopped do not report any new unreferenced objects.
+        */
+       if (scan_should_stop())
+               return;
+
+       /*
         * Scanning result reporting.
         */
        rcu_read_lock();
@@ -1184,11 +1190,10 @@ static int kmemleak_seq_show(struct seq_file *seq, void *v)
        unsigned long flags;
 
        spin_lock_irqsave(&object->lock, flags);
-       if (!unreferenced_object(object))
-               goto out;
-       print_unreferenced(seq, object);
-       reported_leaks++;
-out:
+       if ((object->flags & OBJECT_REPORTED) && unreferenced_object(object)) {
+               print_unreferenced(seq, object);
+               reported_leaks++;
+       }
        spin_unlock_irqrestore(&object->lock, flags);
        return 0;
 }