diff options
author | San Mehat <san@google.com> | 2010-04-27 11:21:17 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-04-27 11:21:17 -0700 |
commit | c65ede9bf1500b8b0920703bc76aba661d513f3a (patch) | |
tree | 207412e5eb3a086dc2915f94e55ce3d3e39553e7 /cmds/dumpstate/utils.c | |
parent | b6c459276f222e01777380c4c1e3a31680e561ec (diff) | |
parent | bd5356468a5e6823fe4dce040ee75fbef66488dc (diff) | |
download | frameworks_base-c65ede9bf1500b8b0920703bc76aba661d513f3a.zip frameworks_base-c65ede9bf1500b8b0920703bc76aba661d513f3a.tar.gz frameworks_base-c65ede9bf1500b8b0920703bc76aba661d513f3a.tar.bz2 |
am bd535646: am 57fff78a: dumpstate: Add blocked process wait-channel info to bugreport
Merge commit 'bd5356468a5e6823fe4dce040ee75fbef66488dc' into kraken
* commit 'bd5356468a5e6823fe4dce040ee75fbef66488dc':
dumpstate: Add blocked process wait-channel info to bugreport
Diffstat (limited to 'cmds/dumpstate/utils.c')
-rw-r--r-- | cmds/dumpstate/utils.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/cmds/dumpstate/utils.c b/cmds/dumpstate/utils.c index c21dace..c7a78cc 100644 --- a/cmds/dumpstate/utils.c +++ b/cmds/dumpstate/utils.c @@ -37,6 +37,64 @@ #include "dumpstate.h" +void for_each_pid(void (*func)(int, const char *), const char *header) { + DIR *d; + struct dirent *de; + + if (!(d = opendir("/proc"))) { + printf("Failed to open /proc (%s)\n", strerror(errno)); + return; + } + + printf("\n------ %s ------\n", header); + while ((de = readdir(d))) { + int pid; + int fd; + char cmdpath[255]; + char cmdline[255]; + + if (!(pid = atoi(de->d_name))) { + continue; + } + + sprintf(cmdpath,"/proc/%d/cmdline", pid); + memset(cmdline, 0, sizeof(cmdline)); + if ((fd = open(cmdpath, O_RDONLY)) < 0) { + strcpy(cmdline, "N/A"); + } else { + read(fd, cmdline, sizeof(cmdline)); + close(fd); + } + func(pid, cmdline); + } + + closedir(d); +} + +void show_wchan(int pid, const char *name) { + char path[255]; + char buffer[255]; + int fd; + + memset(buffer, 0, sizeof(buffer)); + + sprintf(path, "/proc/%d/wchan", pid); + if ((fd = open(path, O_RDONLY)) < 0) { + printf("Failed to open '%s' (%s)\n", path, strerror(errno)); + return; + } + + if (read(fd, buffer, sizeof(buffer)) < 0) { + printf("Failed to read '%s' (%s)\n", path, strerror(errno)); + goto out_close; + } + + printf("%-7d %-32s %s\n", pid, name, buffer); + +out_close: + close(fd); + return; +} /* prints the contents of a file */ int dump_file(const char *title, const char* path) { |