summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2011-07-12 22:30:14 -0700
committerColin Cross <ccross@android.com>2011-07-12 22:30:14 -0700
commiteff788820689e7c2bfd456934e8132a381b31235 (patch)
treea17f7ae9c2a66ccc8397b8401bc8cad30502cf8d
parentdba332410528d11474ae9f878b6984755d55e299 (diff)
downloadextras-eff788820689e7c2bfd456934e8132a381b31235.tar.gz
Detect an error case and prevent printing an uninitialized variable
pm_process_usage can return an error, and leave procs[i]->usage unitialized. Detect the error case and print a warning. Also make the initialization of procs[i]->usage to 0 unconditional, so nothing will be printed in the final procrank stats when an error is detected. Change-Id: I03f90ae6a5ebb201b6e9e43593cec225e1a8ded0
-rw-r--r--procrank/procrank.c36
1 files changed, 21 insertions, 15 deletions
diff --git a/procrank/procrank.c b/procrank/procrank.c
index a522f6f1..489eeb1f 100644
--- a/procrank/procrank.c
+++ b/procrank/procrank.c
@@ -105,24 +105,30 @@ int main(int argc, char *argv[]) {
exit(EXIT_FAILURE);
}
procs[i]->pid = pids[i];
+ pm_memusage_zero(&procs[i]->usage);
error = pm_process_create(ker, pids[i], &proc);
- if (!error) {
- switch (ws) {
- case WS_OFF:
- pm_process_usage(proc, &procs[i]->usage);
- break;
- case WS_ONLY:
- pm_process_workingset(proc, &procs[i]->usage, 0);
- break;
- case WS_RESET:
- pm_process_workingset(proc, NULL, 1);
- break;
- }
- pm_process_destroy(proc);
- } else {
+ if (error) {
fprintf(stderr, "warning: could not create process interface for %d\n", pids[i]);
- pm_memusage_zero(&procs[i]->usage);
+ continue;
+ }
+
+ switch (ws) {
+ case WS_OFF:
+ error = pm_process_usage(proc, &procs[i]->usage);
+ break;
+ case WS_ONLY:
+ error = pm_process_workingset(proc, &procs[i]->usage, 0);
+ break;
+ case WS_RESET:
+ error = pm_process_workingset(proc, NULL, 1);
+ break;
}
+
+ if (error) {
+ fprintf(stderr, "warning: could not read usage for %d\n", pids[i]);
+ }
+
+ pm_process_destroy(proc);
}
free(pids);