summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2011-07-12 23:11:44 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-07-12 23:11:44 -0700
commit3f54dc180d580c9e104d07ab5bc830e7953be502 (patch)
treea5f41f8f05a01c93a9fca352e1b4f4cf10969f7f
parentd7892bf2802c113f2f8824253809d7e7f6e57471 (diff)
parent5923f33ed7cf186ceac3541987efcc32beb29ab9 (diff)
downloadextras-3f54dc180d580c9e104d07ab5bc830e7953be502.tar.gz
Merge changes I5f0758bb,I03f90ae6
* changes: Ignore the vector page in /proc/<pid>/maps Detect an error case and prevent printing an uninitialized variable
-rw-r--r--libpagemap/pm_process.c3
-rw-r--r--procrank/procrank.c36
2 files changed, 24 insertions, 15 deletions
diff --git a/libpagemap/pm_process.c b/libpagemap/pm_process.c
index 1ab367d8..0f54b481 100644
--- a/libpagemap/pm_process.c
+++ b/libpagemap/pm_process.c
@@ -258,6 +258,9 @@ static int read_maps(pm_process_t *proc) {
sscanf(line, "%lx-%lx %s %lx %*s %*d %" S(MAX_LINE) "s",
&map->start, &map->end, perms, &map->offset, name);
+ if (!strcmp(name, "[vectors]"))
+ continue;
+
map->name = malloc(strlen(name) + 1);
if (!map->name) {
error = errno;
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);