diff options
author | Colin Cross <ccross@android.com> | 2011-07-12 23:11:44 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-07-12 23:11:44 -0700 |
commit | 3f54dc180d580c9e104d07ab5bc830e7953be502 (patch) | |
tree | a5f41f8f05a01c93a9fca352e1b4f4cf10969f7f | |
parent | d7892bf2802c113f2f8824253809d7e7f6e57471 (diff) | |
parent | 5923f33ed7cf186ceac3541987efcc32beb29ab9 (diff) | |
download | extras-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.c | 3 | ||||
-rw-r--r-- | procrank/procrank.c | 36 |
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); |