@cryptotaxi247 / netdata-1 / commits / db4dc8c1b

fixed a memory leak in cgroups periodic update job

Costa Tsaousis (ktsaou) committed Jan 3, 2017 at 23:34 UTC db4dc8c1bb1014c7aa4e3d9313c11b03238529da
1 file changed +45 -33
src/sys_fs_cgroup.c
+45 -33
@@ -1005,7 +1005,7 @@ void find_all_cgroups() {
1005 // check for newly added cgroups
1006 // and update the filenames they read
1007 char filename[FILENAME_MAX + 1];
1008 - if(cgroup_enable_cpuacct_stat && !cg->cpuacct_stat.filename) {
1008 + if(unlikely(cgroup_enable_cpuacct_stat && !cg->cpuacct_stat.filename)) {
1009 snprintfz(filename, FILENAME_MAX, "%s%s/cpuacct.stat", cgroup_cpuacct_base, cg->id);
1010 if(stat(filename, &buf) != -1) {
1011 cg->cpuacct_stat.filename = strdupz(filename);
@@ -1013,7 +1013,8 @@ void find_all_cgroups() {
1013 }
1014 else debug(D_CGROUP, "cpuacct.stat file for cgroup '%s': '%s' does not exist.", cg->id, filename);
1015 }
1016 - if(cgroup_enable_cpuacct_usage && !cg->cpuacct_usage.filename) {
1016 +
1017 + if(unlikely(cgroup_enable_cpuacct_usage && !cg->cpuacct_usage.filename)) {
1018 snprintfz(filename, FILENAME_MAX, "%s%s/cpuacct.usage_percpu", cgroup_cpuacct_base, cg->id);
1019 if(stat(filename, &buf) != -1) {
1020 cg->cpuacct_usage.filename = strdupz(filename);
@@ -1021,37 +1022,48 @@ void find_all_cgroups() {
1022 }
1023 else debug(D_CGROUP, "cpuacct.usage_percpu file for cgroup '%s': '%s' does not exist.", cg->id, filename);
1024 }
1024 - if(cgroup_enable_memory && !cg->memory.filename) {
1025 - snprintfz(filename, FILENAME_MAX, "%s%s/memory.stat", cgroup_memory_base, cg->id);
1026 - if(stat(filename, &buf) != -1) {
1027 - cg->memory.filename = strdupz(filename);
1028 - debug(D_CGROUP, "memory.stat filename for cgroup '%s': '%s'", cg->id, cg->memory.filename);
1029 - }
1030 - else debug(D_CGROUP, "memory.stat file for cgroup '%s': '%s' does not exist.", cg->id, filename);
1025
1032 - snprintfz(filename, FILENAME_MAX, "%s%s/memory.usage_in_bytes", cgroup_memory_base, cg->id);
1033 - if(stat(filename, &buf) != -1) {
1034 - cg->memory.filename_usage_in_bytes = strdupz(filename);
1035 - debug(D_CGROUP, "memory.usage_in_bytes filename for cgroup '%s': '%s'", cg->id, cg->memory.filename_usage_in_bytes);
1026 + if(unlikely(cgroup_enable_memory)) {
1027 + if(unlikely(!cg->memory.filename)) {
1028 + snprintfz(filename, FILENAME_MAX, "%s%s/memory.stat", cgroup_memory_base, cg->id);
1029 + if(stat(filename, &buf) != -1) {
1030 + cg->memory.filename = strdupz(filename);
1031 + debug(D_CGROUP, "memory.stat filename for cgroup '%s': '%s'", cg->id, cg->memory.filename);
1032 + }
1033 + else
1034 + debug(D_CGROUP, "memory.stat file for cgroup '%s': '%s' does not exist.", cg->id, filename);
1035 }
1037 - else debug(D_CGROUP, "memory.usage_in_bytes file for cgroup '%s': '%s' does not exist.", cg->id, filename);
1038 -
1039 - snprintfz(filename, FILENAME_MAX, "%s%s/memory.msw_usage_in_bytes", cgroup_memory_base, cg->id);
1040 - if(stat(filename, &buf) != -1) {
1041 - cg->memory.filename_msw_usage_in_bytes = strdupz(filename);
1042 - debug(D_CGROUP, "memory.msw_usage_in_bytes filename for cgroup '%s': '%s'", cg->id, cg->memory.filename_msw_usage_in_bytes);
1036 + if(unlikely(!cg->memory.filename_usage_in_bytes)) {
1037 + snprintfz(filename, FILENAME_MAX, "%s%s/memory.usage_in_bytes", cgroup_memory_base, cg->id);
1038 + if(stat(filename, &buf) != -1) {
1039 + cg->memory.filename_usage_in_bytes = strdupz(filename);
1040 + debug(D_CGROUP, "memory.usage_in_bytes filename for cgroup '%s': '%s'", cg->id, cg->memory.filename_usage_in_bytes);
1041 + }
1042 + else
1043 + debug(D_CGROUP, "memory.usage_in_bytes file for cgroup '%s': '%s' does not exist.", cg->id, filename);
1044 }
1044 - else debug(D_CGROUP, "memory.msw_usage_in_bytes file for cgroup '%s': '%s' does not exist.", cg->id, filename);
1045 -
1046 - snprintfz(filename, FILENAME_MAX, "%s%s/memory.failcnt", cgroup_memory_base, cg->id);
1047 - if(stat(filename, &buf) != -1) {
1048 - cg->memory.filename_failcnt = strdupz(filename);
1049 - debug(D_CGROUP, "memory.failcnt filename for cgroup '%s': '%s'", cg->id, cg->memory.filename_failcnt);
1045 + if(unlikely(!cg->memory.filename_msw_usage_in_bytes)) {
1046 + snprintfz(filename, FILENAME_MAX, "%s%s/memory.msw_usage_in_bytes", cgroup_memory_base, cg->id);
1047 + if(stat(filename, &buf) != -1) {
1048 + cg->memory.filename_msw_usage_in_bytes = strdupz(filename);
1049 + debug(D_CGROUP, "memory.msw_usage_in_bytes filename for cgroup '%s': '%s'", cg->id, cg->memory.filename_msw_usage_in_bytes);
1050 + }
1051 + else
1052 + debug(D_CGROUP, "memory.msw_usage_in_bytes file for cgroup '%s': '%s' does not exist.", cg->id, filename);
1053 + }
1054 + if(unlikely(!cg->memory.filename_failcnt)) {
1055 + snprintfz(filename, FILENAME_MAX, "%s%s/memory.failcnt", cgroup_memory_base, cg->id);
1056 + if(stat(filename, &buf) != -1) {
1057 + cg->memory.filename_failcnt = strdupz(filename);
1058 + debug(D_CGROUP, "memory.failcnt filename for cgroup '%s': '%s'", cg->id, cg->memory.filename_failcnt);
1059 + }
1060 + else
1061 + debug(D_CGROUP, "memory.failcnt file for cgroup '%s': '%s' does not exist.", cg->id, filename);
1062 }
1051 - else debug(D_CGROUP, "memory.failcnt file for cgroup '%s': '%s' does not exist.", cg->id, filename);
1063 }
1053 - if(cgroup_enable_blkio) {
1054 - if(!cg->io_service_bytes.filename) {
1064 +
1065 + if(unlikely(cgroup_enable_blkio)) {
1066 + if(unlikely(!cg->io_service_bytes.filename)) {
1067 snprintfz(filename, FILENAME_MAX, "%s%s/blkio.io_service_bytes", cgroup_blkio_base, cg->id);
1068 if(stat(filename, &buf) != -1) {
1069 cg->io_service_bytes.filename = strdupz(filename);
@@ -1059,7 +1071,7 @@ void find_all_cgroups() {
1071 }
1072 else debug(D_CGROUP, "io_service_bytes file for cgroup '%s': '%s' does not exist.", cg->id, filename);
1073 }
1062 - if(!cg->io_serviced.filename) {
1074 + if(unlikely(!cg->io_serviced.filename)) {
1075 snprintfz(filename, FILENAME_MAX, "%s%s/blkio.io_serviced", cgroup_blkio_base, cg->id);
1076 if(stat(filename, &buf) != -1) {
1077 cg->io_serviced.filename = strdupz(filename);
@@ -1067,7 +1079,7 @@ void find_all_cgroups() {
1079 }
1080 else debug(D_CGROUP, "io_serviced file for cgroup '%s': '%s' does not exist.", cg->id, filename);
1081 }
1070 - if(!cg->throttle_io_service_bytes.filename) {
1082 + if(unlikely(!cg->throttle_io_service_bytes.filename)) {
1083 snprintfz(filename, FILENAME_MAX, "%s%s/blkio.throttle.io_service_bytes", cgroup_blkio_base, cg->id);
1084 if(stat(filename, &buf) != -1) {
1085 cg->throttle_io_service_bytes.filename = strdupz(filename);
@@ -1075,7 +1087,7 @@ void find_all_cgroups() {
1087 }
1088 else debug(D_CGROUP, "throttle_io_service_bytes file for cgroup '%s': '%s' does not exist.", cg->id, filename);
1089 }
1078 - if(!cg->throttle_io_serviced.filename) {
1090 + if(unlikely(!cg->throttle_io_serviced.filename)) {
1091 snprintfz(filename, FILENAME_MAX, "%s%s/blkio.throttle.io_serviced", cgroup_blkio_base, cg->id);
1092 if(stat(filename, &buf) != -1) {
1093 cg->throttle_io_serviced.filename = strdupz(filename);
@@ -1083,7 +1095,7 @@ void find_all_cgroups() {
1095 }
1096 else debug(D_CGROUP, "throttle_io_serviced file for cgroup '%s': '%s' does not exist.", cg->id, filename);
1097 }
1086 - if(!cg->io_merged.filename) {
1098 + if(unlikely(!cg->io_merged.filename)) {
1099 snprintfz(filename, FILENAME_MAX, "%s%s/blkio.io_merged", cgroup_blkio_base, cg->id);
1100 if(stat(filename, &buf) != -1) {
1101 cg->io_merged.filename = strdupz(filename);
@@ -1091,7 +1103,7 @@ void find_all_cgroups() {
1103 }
1104 else debug(D_CGROUP, "io_merged file for cgroup '%s': '%s' does not exist.", cg->id, filename);
1105 }
1094 - if(!cg->io_queued.filename) {
1106 + if(unlikely(!cg->io_queued.filename)) {
1107 snprintfz(filename, FILENAME_MAX, "%s%s/blkio.io_queued", cgroup_blkio_base, cg->id);
1108 if(stat(filename, &buf) != -1) {
1109 cg->io_queued.filename = strdupz(filename);