Messages in this thread Patch in this message | | | Subject | Re: [PATCH] kmemleak: Never return a pointer you didn't 'get' | From | Catalin Marinas <> | Date | Wed, 27 Apr 2011 10:31:20 +0100 |
| |
On Thu, 2011-04-21 at 12:39 +0100, Phil Carmody wrote: > Old - If you don't get the last pointer that you looked at, then it will > still be put, as there's no way of knowing you didn't get it. > > New - If you didn't get it, then it refers to something deleted, and > your work is done, so return NULL. > > Signed-off-by: Phil Carmody <ext-phil.2.carmody@nokia.com>
Good catch. But I think the code may look slightly simpler as below:
diff --git a/mm/kmemleak.c b/mm/kmemleak.c index c1d5867..aacee45 100644 --- a/mm/kmemleak.c +++ b/mm/kmemleak.c @@ -1414,9 +1414,12 @@ static void *kmemleak_seq_next(struct seq_file *seq, void *v, loff_t *pos) ++(*pos); list_for_each_continue_rcu(n, &object_list) { - next_obj = list_entry(n, struct kmemleak_object, object_list); - if (get_object(next_obj)) + struct kmemleak_object *obj = + list_entry(n, struct kmemleak_object, object_list); + if (get_object(obj)) { + next_obj = obj; break; + } } put_object(prev_obj);
Thanks.
-- Catalin
| |