summaryrefslogtreecommitdiff
path: root/mm
diff options
context:
space:
mode:
authorSha Zhengju <handai.szj@taobao.com>2012-05-10 13:01:45 -0700
committerVarun Wadekar <vwadekar@nvidia.com>2012-05-18 16:06:56 +0530
commit661c0f0474d11afd67e2e23a88a30b8c5f2e7e70 (patch)
tree4aa3d7bd9a179a909155de3d99acabd1dce031d3 /mm
parent3518bf10c4b548390a35e465ae8bc192dc4f5309 (diff)
memcg: free spare array to avoid memory leak
When the last event is unregistered, there is no need to keep the spare array anymore. So free it to avoid memory leak. Signed-off-by: Sha Zhengju <handai.szj@taobao.com> Acked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Reviewed-by: Kirill A. Shutemov <kirill@shutemov.name> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm')
-rw-r--r--mm/memcontrol.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/mm/memcontrol.c b/mm/memcontrol.c
index 31ab9c3f0178..b659260c56ad 100644
--- a/mm/memcontrol.c
+++ b/mm/memcontrol.c
@@ -4507,6 +4507,12 @@ static void mem_cgroup_usage_unregister_event(struct cgroup *cgrp,
swap_buffers:
/* Swap primary and spare array */
thresholds->spare = thresholds->primary;
+ /* If all events are unregistered, free the spare array */
+ if (!new) {
+ kfree(thresholds->spare);
+ thresholds->spare = NULL;
+ }
+
rcu_assign_pointer(thresholds->primary, new);
/* To be sure that nobody uses thresholds */