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);