Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(515)

Unified Diff: user_collector.cc

Issue 6480009: crash-reporter: when exe symlink read fails send diags and still ignore chrome crashes (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/crash-reporter.git@master
Patch Set: Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « user_collector.h ('k') | user_collector_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: user_collector.cc
diff --git a/user_collector.cc b/user_collector.cc
index a6dd091e770349587bc052a924fe790ed372cf8f..6e6c76596c649c3a6b696c4f35daeb951c747ab9 100644
--- a/user_collector.cc
+++ b/user_collector.cc
@@ -114,6 +114,9 @@ bool UserCollector::GetSymlinkTarget(const FilePath &symlink,
buffer.reset(new char[max_size + 1]);
ssize_t size = readlink(symlink.value().c_str(), buffer.get(), max_size);
if (size < 0) {
+ int saved_errno = errno;
+ logger_->LogError("Readlink failed on %s with %d",
+ symlink.value().c_str(), saved_errno);
return false;
}
buffer[size] = 0;
@@ -136,8 +139,25 @@ bool UserCollector::GetSymlinkTarget(const FilePath &symlink,
bool UserCollector::GetExecutableBaseNameFromPid(uid_t pid,
std::string *base_name) {
FilePath target;
- if (!GetSymlinkTarget(GetProcessPath(pid).Append("exe"), &target))
+ FilePath process_path = GetProcessPath(pid);
+ FilePath exe_path = process_path.Append("exe");
+ if (!GetSymlinkTarget(exe_path, &target)) {
+ logger_->LogInfo("GetSymlinkTarget failed - Path %s DirectoryExists: %d",
+ process_path.value().c_str(),
+ file_util::DirectoryExists(process_path));
+ // Try to further diagnose exe readlink failure cause.
+ struct stat buf;
+ int stat_result = stat(exe_path.value().c_str(), &buf);
+ int saved_errno = errno;
+ if (stat_result < 0) {
+ logger_->LogInfo("stat %s failed: %d %d", exe_path.value().c_str(),
+ stat_result, saved_errno);
+ } else {
+ logger_->LogInfo("stat %s succeeded: st_mode=%d",
+ exe_path.value().c_str(), buf.st_mode);
+ }
return false;
+ }
*base_name = target.BaseName().value();
return true;
}
@@ -247,7 +267,7 @@ bool UserCollector::GetCreatedCrashDirectory(pid_t pid,
if (!file_util::ReadFileToString(process_path.Append("status"),
&status)) {
logger_->LogError("Could not read status file");
- logger_->LogInfo("Path %s FileExists: %d",
+ logger_->LogInfo("Path %s DirectoryExists: %d",
process_path.value().c_str(),
file_util::DirectoryExists(process_path));
return false;
@@ -444,7 +464,7 @@ bool UserCollector::HandleCrash(const std::string &crash_attributes,
// Treat Chrome crashes as if the user opted-out. We stop counting Chrome
// crashes towards user crashes, so user crashes really mean non-Chrome
// user-space crashes.
- if (exec == "chrome") {
+ if (exec == "chrome" || exec == "supplied_chrome") {
feedback = false;
handling_string = "ignoring - chrome crash";
}
@@ -457,10 +477,8 @@ bool UserCollector::HandleCrash(const std::string &crash_attributes,
if (generate_diagnostics_) {
bool out_of_capacity = false;
- logger_->set_accumulating(true);
bool convert_and_enqueue_result =
ConvertAndEnqueueCrash(pid, exec, &out_of_capacity);
- logger_->set_accumulating(false);
if (!convert_and_enqueue_result) {
if (!out_of_capacity)
EnqueueCollectionErrorLog(pid, exec);
« no previous file with comments | « user_collector.h ('k') | user_collector_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698