From: Jan Safranek Date: Wed, 24 Aug 2011 09:41:26 +0000 (+0200) Subject: lssubsys: Fixed file descriptor leak on error enumerating controllers. X-Git-Tag: v0.38~50 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9d455fe260ba92435e935b54915203f5057751a6;p=thirdparty%2Flibcgroup.git lssubsys: Fixed file descriptor leak on error enumerating controllers. Close the iterator when cgroup_get_all_controller_next fails. I've rewritten the loop to have one error check for both cgroup_get_all_controller_begin and cgroup_get_all_controller_end. Signed-off-by: Jan Safranek --- diff --git a/src/tools/lssubsys.c b/src/tools/lssubsys.c index 28ef4560..d64f6deb 100644 --- a/src/tools/lssubsys.c +++ b/src/tools/lssubsys.c @@ -167,8 +167,7 @@ static int cgroup_list_all_controllers(const char *tname, int is_on_list = 0; ret = cgroup_get_all_controller_begin(&handle, &info); - - while (ret != ECGEOF) { + while (ret == 0) { if (info.hierarchy == 0) { /* the controller is not attached to any hierrachy */ if (flags & FL_ALL) @@ -207,15 +206,17 @@ static int cgroup_list_all_controllers(const char *tname, } ret = cgroup_get_all_controller_next(&handle, &info); - if (ret && ret != ECGEOF) { - fprintf(stderr, - "cgroup_get_controller_next failed (%s)\n", - cgroup_strerror(ret)); - return ret; - } + } + cgroup_get_all_controller_end(&handle); + if (ret == ECGEOF) + ret = 0; + if (ret) { + fprintf(stderr, + "cgroup_get_controller_begin/next failed (%s)\n", + cgroup_strerror(ret)); + return ret; } - ret = cgroup_get_all_controller_end(&handle); for (j = 0; j < counter; j++) ret = print_all_controllers_in_hierarchy(tname,