summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristopher Ferris <cferris@google.com>2014-05-05 23:08:34 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-05-05 23:08:34 +0000
commitfdadb420afa3419058a3be46dc797f017e7290de (patch)
tree0816c33c34dd5316caff86d25c1cc86e9a9d2cf2
parent54c90a1415a5dd1bd81e3994ff586adb5cda56b2 (diff)
parentb52a48affc77232047a599afa3e567c0a8c01b69 (diff)
downloadsystem_core-fdadb420afa3419058a3be46dc797f017e7290de.zip
system_core-fdadb420afa3419058a3be46dc797f017e7290de.tar.gz
system_core-fdadb420afa3419058a3be46dc797f017e7290de.tar.bz2
am b52a48af: Merge "Log stack even if tombstone cannot be created."
* commit 'b52a48affc77232047a599afa3e567c0a8c01b69': Log stack even if tombstone cannot be created.
-rwxr-xr-xdebuggerd/tombstone.cpp27
1 files changed, 17 insertions, 10 deletions
diff --git a/debuggerd/tombstone.cpp b/debuggerd/tombstone.cpp
index f95e572..d0cefc7 100755
--- a/debuggerd/tombstone.cpp
+++ b/debuggerd/tombstone.cpp
@@ -736,33 +736,40 @@ char* engrave_tombstone(pid_t pid, pid_t tid, int signal, int original_si_code,
uintptr_t abort_msg_address, bool dump_sibling_threads, bool quiet,
bool* detach_failed, int* total_sleep_time_usec) {
if ((mkdir(TOMBSTONE_DIR, 0755) == -1) && (errno != EEXIST)) {
- LOG("failed to create %s: %s\n", TOMBSTONE_DIR, strerror(errno));
+ LOG("failed to create %s: %s\n", TOMBSTONE_DIR, strerror(errno));
}
if (chown(TOMBSTONE_DIR, AID_SYSTEM, AID_SYSTEM) == -1) {
- LOG("failed to change ownership of %s: %s\n", TOMBSTONE_DIR, strerror(errno));
+ LOG("failed to change ownership of %s: %s\n", TOMBSTONE_DIR, strerror(errno));
}
- if (selinux_android_restorecon(TOMBSTONE_DIR, 0) == -1) {
- *detach_failed = false;
- return NULL;
+ int fd = -1;
+ char* path = NULL;
+ if (selinux_android_restorecon(TOMBSTONE_DIR, 0) == 0) {
+ path = find_and_open_tombstone(&fd);
+ } else {
+ LOG("Failed to restore security context, not writing tombstone.\n");
}
- int fd;
- char* path = find_and_open_tombstone(&fd);
- if (!path) {
+ if (fd < 0 && quiet) {
+ LOG("Skipping tombstone write, nothing to do.\n");
*detach_failed = false;
return NULL;
}
log_t log;
log.tfd = fd;
- log.amfd = activity_manager_connect();
+ // Preserve amfd since it can be modified through the calls below without
+ // being closed.
+ int amfd = activity_manager_connect();
+ log.amfd = amfd;
log.quiet = quiet;
*detach_failed = dump_crash(&log, pid, tid, signal, original_si_code, abort_msg_address,
dump_sibling_threads, total_sleep_time_usec);
- close(log.amfd);
+ // Either of these file descriptors can be -1, any error is ignored.
+ close(amfd);
close(fd);
+
return path;
}