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

Unified Diff: third_party/crashpad/crashpad/handler/win/crash_other_program.cc

Issue 2804713002: Update Crashpad to b4095401639ebe2ad33169e5c1d994065cbff1b8 (Closed)
Patch Set: Created 3 years, 8 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
Index: third_party/crashpad/crashpad/handler/win/crash_other_program.cc
diff --git a/third_party/crashpad/crashpad/handler/win/crash_other_program.cc b/third_party/crashpad/crashpad/handler/win/crash_other_program.cc
index 012b4ba3cc3a8bc3c5d719e8c14fb1c075fad080..389aee1f10bc024db4d51aaa347ea117bbcf426f 100644
--- a/third_party/crashpad/crashpad/handler/win/crash_other_program.cc
+++ b/third_party/crashpad/crashpad/handler/win/crash_other_program.cc
@@ -18,8 +18,9 @@
#include "base/files/file_path.h"
#include "base/logging.h"
+#include "base/strings/stringprintf.h"
#include "client/crashpad_client.h"
-#include "test/paths.h"
+#include "test/test_paths.h"
#include "test/win/child_launcher.h"
#include "util/file/file_io.h"
#include "util/win/scoped_handle.h"
@@ -29,20 +30,21 @@ namespace crashpad {
namespace test {
namespace {
+constexpr DWORD kCrashAndDumpTargetExitCode = 0xdeadbea7;
+
bool CrashAndDumpTarget(const CrashpadClient& client, HANDLE process) {
DWORD target_pid = GetProcessId(process);
- HANDLE thread_snap_raw = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
- if (thread_snap_raw == INVALID_HANDLE_VALUE) {
- LOG(ERROR) << "CreateToolhelp32Snapshot";
+ ScopedFileHANDLE thread_snap(CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0));
+ if (!thread_snap.is_valid()) {
+ PLOG(ERROR) << "CreateToolhelp32Snapshot";
return false;
}
- ScopedFileHANDLE thread_snap(thread_snap_raw);
THREADENTRY32 te32;
te32.dwSize = sizeof(THREADENTRY32);
if (!Thread32First(thread_snap.get(), &te32)) {
- LOG(ERROR) << "Thread32First";
+ PLOG(ERROR) << "Thread32First";
return false;
}
@@ -55,9 +57,12 @@ bool CrashAndDumpTarget(const CrashpadClient& client, HANDLE process) {
if (te32.tpBasePri == 9) {
ScopedKernelHANDLE thread(
OpenThread(kXPThreadAllAccess, false, te32.th32ThreadID));
+ if (!thread.is_valid()) {
+ PLOG(ERROR) << "OpenThread";
+ return false;
+ }
if (!client.DumpAndCrashTargetProcess(
- process, thread.get(), 0xdeadbea7)) {
- LOG(ERROR) << "DumpAndCrashTargetProcess failed";
+ process, thread.get(), kCrashAndDumpTargetExitCode)) {
return false;
}
return true;
@@ -65,6 +70,7 @@ bool CrashAndDumpTarget(const CrashpadClient& client, HANDLE process) {
}
} while (Thread32Next(thread_snap.get(), &te32));
+ LOG(ERROR) << "target not found";
return false;
}
@@ -73,7 +79,7 @@ int CrashOtherProgram(int argc, wchar_t* argv[]) {
if (argc == 2 || argc == 3) {
if (!client.SetHandlerIPCPipe(argv[1])) {
- LOG(ERROR) << "SetHandler";
+ LOG(ERROR) << "SetHandlerIPCPipe";
return EXIT_FAILURE;
}
} else {
@@ -82,7 +88,7 @@ int CrashOtherProgram(int argc, wchar_t* argv[]) {
}
// Launch another process that hangs.
- base::FilePath test_executable = Paths::Executable();
+ base::FilePath test_executable = TestPaths::Executable();
std::wstring child_test_executable =
test_executable.DirName().Append(L"hanging_program.exe").value();
ChildLauncher child(child_test_executable, argv[1]);
@@ -96,15 +102,28 @@ int CrashOtherProgram(int argc, wchar_t* argv[]) {
return EXIT_FAILURE;
}
+ DWORD expect_exit_code;
if (argc == 3 && wcscmp(argv[2], L"noexception") == 0) {
- client.DumpAndCrashTargetProcess(child.process_handle(), 0, 0);
- return EXIT_SUCCESS;
+ expect_exit_code = CrashpadClient::kTriggeredExceptionCode;
+ if (!client.DumpAndCrashTargetProcess(child.process_handle(), 0, 0))
+ return EXIT_FAILURE;
} else {
- if (CrashAndDumpTarget(client, child.process_handle()))
- return EXIT_SUCCESS;
+ expect_exit_code = kCrashAndDumpTargetExitCode;
+ if (!CrashAndDumpTarget(client, child.process_handle())) {
+ return EXIT_FAILURE;
+ }
+ }
+
+ DWORD exit_code = child.WaitForExit();
+ if (exit_code != expect_exit_code) {
+ LOG(ERROR) << base::StringPrintf(
+ "incorrect exit code, expected 0x%x, observed 0x%x",
+ expect_exit_code,
+ exit_code);
+ return EXIT_FAILURE;
}
- return EXIT_FAILURE;
+ return EXIT_SUCCESS;
}
} // namespace

Powered by Google App Engine
This is Rietveld 408576698