[client] Add test to repro desired lockfile behavior [crashpad/crashpad : main]

6 views
Skip to first unread message

Justin Cohen (Gerrit)

unread,
Jul 21, 2025, 4:11:46 PMJul 21
to Ben Hamilton, crashp...@chromium.org
Attention needed from Ben Hamilton

Justin Cohen added 1 comment

Patchset-level comments
File-level comment, Patchset 1 (Latest):
Justin Cohen . resolved

I thought it was crashpad_is_android || crashpad_is_fuchsia, not Windows too?

Open in Gerrit

Related details

Attention is currently required from:
  • Ben Hamilton
Submit Requirements:
  • requirement is not satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: crashpad/crashpad
Gerrit-Branch: main
Gerrit-Change-Id: Idcb72ae39d289fb1037d9a8001cd6be9e781297f
Gerrit-Change-Number: 6775604
Gerrit-PatchSet: 1
Gerrit-Owner: Ben Hamilton <benha...@google.com>
Gerrit-Reviewer: Justin Cohen <justi...@chromium.org>
Gerrit-Attention: Ben Hamilton <benha...@google.com>
Gerrit-Comment-Date: Mon, 21 Jul 2025 20:11:42 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
unsatisfied_requirement
open
diffy

Ben Hamilton (Gerrit)

unread,
Jul 21, 2025, 4:19:00 PMJul 21
to Justin Cohen, crashp...@chromium.org
Attention needed from Justin Cohen

Ben Hamilton added 1 comment

Patchset-level comments
Justin Cohen . resolved

I thought it was crashpad_is_android || crashpad_is_fuchsia, not Windows too?

Ben Hamilton

Thanks, I misread it. FWIW, Android does support `flock()`, I'm not sure why
we disable it there.

Open in Gerrit

Related details

Attention is currently required from:
  • Justin Cohen
Submit Requirements:
  • requirement is not satisfiedCode-Owners
  • requirement is not satisfiedCode-Review
Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
Gerrit-MessageType: comment
Gerrit-Project: crashpad/crashpad
Gerrit-Branch: main
Gerrit-Change-Id: Idcb72ae39d289fb1037d9a8001cd6be9e781297f
Gerrit-Change-Number: 6775604
Gerrit-PatchSet: 1
Gerrit-Owner: Ben Hamilton <benha...@google.com>
Gerrit-Reviewer: Justin Cohen <justi...@chromium.org>
Gerrit-Attention: Justin Cohen <justi...@chromium.org>
Gerrit-Comment-Date: Mon, 21 Jul 2025 20:18:58 +0000
Gerrit-HasComments: Yes
Gerrit-Has-Labels: No
Comment-In-Reply-To: Justin Cohen <justi...@chromium.org>
unsatisfied_requirement
open
diffy

Mark Mentovai (Gerrit)

unread,
Jul 21, 2025, 5:08:42 PMJul 21
to Ben Hamilton, Justin Cohen, crashp...@chromium.org
Attention needed from Ben Hamilton and Justin Cohen

Mark Mentovai added 3 comments

File client/settings_test.cc
Line 57, Patchset 3: temp_dir_.path().Append(FILE_PATH_LITERAL("settings.__lock__"));
Mark Mentovai . unresolved

This should be based on `settings_path`

Line 57, Patchset 3: temp_dir_.path().Append(FILE_PATH_LITERAL("settings.__lock__"));
Mark Mentovai . unresolved

And `Settings` leaves a constant exposed for this, which you should use.

Line 121, Patchset 3: // `CRASHPAD_FLOCK_ALWAYS_SUPPORTED`, but this test exercises what happens
// when that flag is not properly defined.
Mark Mentovai . unresolved

…it shouldn’t, because the flag should be properly defined!

Does this mean that the test WOULD exercise what WOULD happen if the flag were not properly defined?

Do you really just want something like

```
#if !(BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_FUCHSIA)) && !CRASHPAD_FLOCK_ALWAYS_SUPPORTED
#error bad
#elif (BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_FUCHSIA)) && CRASHPAD_FLOCK_ALWAYS_SUPPORTED
#error also bad
#endif
```

?

Open in Gerrit

Related details

Attention is currently required from:
  • Ben Hamilton
  • Justin Cohen
Submit Requirements:
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: crashpad/crashpad
    Gerrit-Branch: main
    Gerrit-Change-Id: Idcb72ae39d289fb1037d9a8001cd6be9e781297f
    Gerrit-Change-Number: 6775604
    Gerrit-PatchSet: 3
    Gerrit-Owner: Ben Hamilton <benha...@google.com>
    Gerrit-Reviewer: Justin Cohen <justi...@chromium.org>
    Gerrit-CC: Mark Mentovai <ma...@chromium.org>
    Gerrit-Attention: Ben Hamilton <benha...@google.com>
    Gerrit-Attention: Justin Cohen <justi...@chromium.org>
    Gerrit-Comment-Date: Mon, 21 Jul 2025 21:08:39 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    unsatisfied_requirement
    open
    diffy

    Ben Hamilton (Gerrit)

    unread,
    Jul 21, 2025, 5:22:27 PMJul 21
    to Mark Mentovai, Justin Cohen, crashp...@chromium.org
    Attention needed from Justin Cohen and Mark Mentovai

    Ben Hamilton added 3 comments

    File client/settings_test.cc
    Line 57, Patchset 3: temp_dir_.path().Append(FILE_PATH_LITERAL("settings.__lock__"));
    Mark Mentovai . resolved

    This should be based on `settings_path`

    Ben Hamilton

    Done

    Line 57, Patchset 3: temp_dir_.path().Append(FILE_PATH_LITERAL("settings.__lock__"));
    Mark Mentovai . resolved

    And `Settings` leaves a constant exposed for this, which you should use.

    Ben Hamilton

    Done

    Line 121, Patchset 3: // `CRASHPAD_FLOCK_ALWAYS_SUPPORTED`, but this test exercises what happens
    // when that flag is not properly defined.
    Mark Mentovai . unresolved

    …it shouldn’t, because the flag should be properly defined!

    Does this mean that the test WOULD exercise what WOULD happen if the flag were not properly defined?

    Do you really just want something like

    ```
    #if !(BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_FUCHSIA)) && !CRASHPAD_FLOCK_ALWAYS_SUPPORTED
    #error bad
    #elif (BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_FUCHSIA)) && CRASHPAD_FLOCK_ALWAYS_SUPPORTED
    #error also bad
    #endif
    ```

    ?

    Ben Hamilton

    For context, this was to reproduce the runtime error from b/430145411.

    I wanted to write a test to exercise the desired behavior at runtime: on platforms that support `flock()`, the existence or not of a `.__lock__` file should not impact behavior of the settings library.

    When the bug hits, this test fails, because `Initialize()` fails.

    The underlying issue was indeed due to the flag not being properly defined in a subset of library source files; an `#error` in a test source file will not catch this at build time.

    If you think it's not worth having a runtime test for the behavior, I'm OK with replacing this with an `#error` in the affected library source file, but that seemed a little tautological.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Justin Cohen
    • Mark Mentovai
    Submit Requirements:
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: crashpad/crashpad
    Gerrit-Branch: main
    Gerrit-Change-Id: Idcb72ae39d289fb1037d9a8001cd6be9e781297f
    Gerrit-Change-Number: 6775604
    Gerrit-PatchSet: 4
    Gerrit-Owner: Ben Hamilton <benha...@google.com>
    Gerrit-Reviewer: Justin Cohen <justi...@chromium.org>
    Gerrit-CC: Mark Mentovai <ma...@chromium.org>
    Gerrit-Attention: Justin Cohen <justi...@chromium.org>
    Gerrit-Attention: Mark Mentovai <ma...@chromium.org>
    Gerrit-Comment-Date: Mon, 21 Jul 2025 21:22:25 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Mark Mentovai <ma...@chromium.org>
    unsatisfied_requirement
    open
    diffy

    Mark Mentovai (Gerrit)

    unread,
    Jul 22, 2025, 2:05:05 PMJul 22
    to Ben Hamilton, Justin Cohen, crashp...@chromium.org
    Attention needed from Ben Hamilton and Justin Cohen

    Mark Mentovai added 1 comment

    File client/settings_test.cc
    Line 121, Patchset 3: // `CRASHPAD_FLOCK_ALWAYS_SUPPORTED`, but this test exercises what happens
    // when that flag is not properly defined.
    Mark Mentovai . unresolved

    …it shouldn’t, because the flag should be properly defined!

    Does this mean that the test WOULD exercise what WOULD happen if the flag were not properly defined?

    Do you really just want something like

    ```
    #if !(BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_FUCHSIA)) && !CRASHPAD_FLOCK_ALWAYS_SUPPORTED
    #error bad
    #elif (BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_FUCHSIA)) && CRASHPAD_FLOCK_ALWAYS_SUPPORTED
    #error also bad
    #endif
    ```

    ?

    Ben Hamilton

    For context, this was to reproduce the runtime error from b/430145411.

    I wanted to write a test to exercise the desired behavior at runtime: on platforms that support `flock()`, the existence or not of a `.__lock__` file should not impact behavior of the settings library.

    When the bug hits, this test fails, because `Initialize()` fails.

    The underlying issue was indeed due to the flag not being properly defined in a subset of library source files; an `#error` in a test source file will not catch this at build time.

    If you think it's not worth having a runtime test for the behavior, I'm OK with replacing this with an `#error` in the affected library source file, but that seemed a little tautological.

    Mark Mentovai

    Can you take me through this in a little more detail? Why do platforms that don’t lock with a `.__lock__` file care about the presence of that file? Why, when platforms that were expected to use `flock` instead wound up with a `.__lock__` file, was `Settings` initialization failing?

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Ben Hamilton
    • Justin Cohen
    Submit Requirements:
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: crashpad/crashpad
    Gerrit-Branch: main
    Gerrit-Change-Id: Idcb72ae39d289fb1037d9a8001cd6be9e781297f
    Gerrit-Change-Number: 6775604
    Gerrit-PatchSet: 6
    Gerrit-Owner: Ben Hamilton <benha...@google.com>
    Gerrit-Reviewer: Justin Cohen <justi...@chromium.org>
    Gerrit-CC: Mark Mentovai <ma...@chromium.org>
    Gerrit-Attention: Ben Hamilton <benha...@google.com>
    Gerrit-Attention: Justin Cohen <justi...@chromium.org>
    Gerrit-Comment-Date: Tue, 22 Jul 2025 18:05:02 +0000
    Gerrit-HasComments: Yes
    Gerrit-Has-Labels: No
    Comment-In-Reply-To: Ben Hamilton <benha...@google.com>
    Comment-In-Reply-To: Mark Mentovai <ma...@chromium.org>
    unsatisfied_requirement
    open
    diffy

    Ben Hamilton (Gerrit)

    unread,
    Jul 22, 2025, 2:16:38 PMJul 22
    to Mark Mentovai, Justin Cohen, crashp...@chromium.org
    Attention needed from Justin Cohen and Mark Mentovai

    Ben Hamilton added 1 comment

    File client/settings_test.cc
    Line 121, Patchset 3: // `CRASHPAD_FLOCK_ALWAYS_SUPPORTED`, but this test exercises what happens
    // when that flag is not properly defined.
    Mark Mentovai . unresolved

    …it shouldn’t, because the flag should be properly defined!

    Does this mean that the test WOULD exercise what WOULD happen if the flag were not properly defined?

    Do you really just want something like

    ```
    #if !(BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_FUCHSIA)) && !CRASHPAD_FLOCK_ALWAYS_SUPPORTED
    #error bad
    #elif (BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_FUCHSIA)) && CRASHPAD_FLOCK_ALWAYS_SUPPORTED
    #error also bad
    #endif
    ```

    ?

    Ben Hamilton

    For context, this was to reproduce the runtime error from b/430145411.

    I wanted to write a test to exercise the desired behavior at runtime: on platforms that support `flock()`, the existence or not of a `.__lock__` file should not impact behavior of the settings library.

    When the bug hits, this test fails, because `Initialize()` fails.

    The underlying issue was indeed due to the flag not being properly defined in a subset of library source files; an `#error` in a test source file will not catch this at build time.

    If you think it's not worth having a runtime test for the behavior, I'm OK with replacing this with an `#error` in the affected library source file, but that seemed a little tautological.

    Mark Mentovai

    Can you take me through this in a little more detail? Why do platforms that don’t lock with a `.__lock__` file care about the presence of that file? Why, when platforms that were expected to use `flock` instead wound up with a `.__lock__` file, was `Settings` initialization failing?

    Ben Hamilton

    The root cause of b/430145411 was inconsistent application of the preprocessor define `CRASHPAD_FLOCK_ALWAYS_SUPPORTED` on Apple platforms.

    On these platforms, if the process was suspended or terminated while Crashpad had created the `.__lock__` file, the `.__lock__` file would never be cleaned up, and Crashpad would return errors whenever initializing settings or the crash report database.

    This turned into a `DCHECK()` in debug builds, and silently dropping all crash reports in release builds.

    Currently, all platforms which do not support `CRASHPAD_FLOCK_ALWAYS_SUPPORTED` happen to use `CrashReportDatabaseGeneric`, which contains code to discard lock files after 3 days:

    However, Apple platforms do not use `CrashReportDatabaseGeneric`, so they never discard stale lock files.

    I wrote this test to reproduce the behavior of trying to open the settings with a `.__lock__` file (which should be ignored outside Android and Fuchsia).

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Justin Cohen
    • Mark Mentovai
    Submit Requirements:
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: crashpad/crashpad
    Gerrit-Branch: main
    Gerrit-Change-Id: Idcb72ae39d289fb1037d9a8001cd6be9e781297f
    Gerrit-Change-Number: 6775604
    Gerrit-PatchSet: 6
    Gerrit-Owner: Ben Hamilton <benha...@google.com>
    Gerrit-Reviewer: Justin Cohen <justi...@chromium.org>
    Gerrit-CC: Mark Mentovai <ma...@chromium.org>
    Gerrit-Attention: Justin Cohen <justi...@chromium.org>
    Gerrit-Attention: Mark Mentovai <ma...@chromium.org>
    Gerrit-Comment-Date: Tue, 22 Jul 2025 18:16:36 +0000
    unsatisfied_requirement
    open
    diffy

    Mark Mentovai (Gerrit)

    unread,
    Jul 22, 2025, 2:26:24 PMJul 22
    to Ben Hamilton, Justin Cohen, crashp...@chromium.org
    Attention needed from Ben Hamilton and Justin Cohen

    Mark Mentovai added 1 comment

    File client/settings_test.cc
    Mark Mentovai

    The root cause of b/430145411 was inconsistent application of the preprocessor define `CRASHPAD_FLOCK_ALWAYS_SUPPORTED` on Apple platforms.

    Yeah, I get how a build could theoretically be misconfigured to create that situation, but…that’s a really weird thing. A really weird thing to test specifically for, too.

    What happened? Crashpad would try to lock on the no-`flock` path, and then unlock on the `flock` path? Did that produce any errors?

    Or: you say it was inconsistently applied. Which translation units had that macro defined properly, and which were missing it?

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Ben Hamilton
    • Justin Cohen
    Submit Requirements:
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: crashpad/crashpad
    Gerrit-Branch: main
    Gerrit-Change-Id: Idcb72ae39d289fb1037d9a8001cd6be9e781297f
    Gerrit-Change-Number: 6775604
    Gerrit-PatchSet: 6
    Gerrit-Owner: Ben Hamilton <benha...@google.com>
    Gerrit-Reviewer: Justin Cohen <justi...@chromium.org>
    Gerrit-CC: Mark Mentovai <ma...@chromium.org>
    Gerrit-Attention: Ben Hamilton <benha...@google.com>
    Gerrit-Attention: Justin Cohen <justi...@chromium.org>
    Gerrit-Comment-Date: Tue, 22 Jul 2025 18:26:21 +0000
    unsatisfied_requirement
    open
    diffy

    Ben Hamilton (Gerrit)

    unread,
    Jul 22, 2025, 2:36:15 PMJul 22
    to Mark Mentovai, Justin Cohen, crashp...@chromium.org
    Attention needed from Justin Cohen and Mark Mentovai

    Ben Hamilton added 1 comment

    File client/settings_test.cc
    Ben Hamilton

    It is a weird thing, but unfortunately it happened.

    The macro was defined for all translation units except for:

    • `client/annotation.cc`
    • `client/annotation_list.cc`
    • `client/crash_report_database.cc`
    • `client/crashpad_info.cc`
    • `client/settings.cc`

    Outside these files, the preprocessor macro is only checked in one other place:

    https://chromium.googlesource.com/crashpad/crashpad/+/refs/heads/main/util/file/file_io_posix.cc#212

    The code in `file_io_posix.cc` is only invoked from the code under `client/...`. so effectively, Apple builds were running with the non-`flock` `.__lock__` file management codepath everywhere.

    Without the stale lock file cleanup logic from `CrashReportDatabaseGeneric`, whenever a process crashed while the `.__lock__` file existed, subsequent launches would permanently be stuck with a failed crash report database (it would always report that it was locked) and a failed settings file (same).

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Justin Cohen
    • Mark Mentovai
    Submit Requirements:
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: crashpad/crashpad
    Gerrit-Branch: main
    Gerrit-Change-Id: Idcb72ae39d289fb1037d9a8001cd6be9e781297f
    Gerrit-Change-Number: 6775604
    Gerrit-PatchSet: 6
    Gerrit-Owner: Ben Hamilton <benha...@google.com>
    Gerrit-Reviewer: Justin Cohen <justi...@chromium.org>
    Gerrit-CC: Mark Mentovai <ma...@chromium.org>
    Gerrit-Attention: Justin Cohen <justi...@chromium.org>
    Gerrit-Attention: Mark Mentovai <ma...@chromium.org>
    Gerrit-Comment-Date: Tue, 22 Jul 2025 18:36:12 +0000
    unsatisfied_requirement
    open
    diffy

    Mark Mentovai (Gerrit)

    unread,
    Jul 22, 2025, 3:01:25 PMJul 22
    to Ben Hamilton, Justin Cohen, crashp...@chromium.org
    Attention needed from Ben Hamilton and Justin Cohen

    Mark Mentovai added 1 comment

    File client/settings_test.cc
    Mark Mentovai

    It is a weird thing, but unfortunately it happened.

    The macro was defined for all translation units except for:

    • `client/annotation.cc`
    • `client/annotation_list.cc`
    • `client/crash_report_database.cc`
    • `client/crashpad_info.cc`
    • `client/settings.cc`

    Outside these files, the preprocessor macro is only checked in one other place:

    https://chromium.googlesource.com/crashpad/crashpad/+/refs/heads/main/util/file/file_io_posix.cc#212

    The code in `file_io_posix.cc` is only invoked from the code under `client/...`. so effectively, Apple builds were running with the non-`flock` `.__lock__` file management codepath everywhere.

    Without the stale lock file cleanup logic from `CrashReportDatabaseGeneric`, whenever a process crashed while the `.__lock__` file existed, subsequent launches would permanently be stuck with a failed crash report database (it would always report that it was locked) and a failed settings file (same).

    OK, I see.

    Perhaps the better test would be to make a platform-appropriate CrashReportDatabase, open its Settings and leak a lock (perhaps by crashing in a child process?), fire off whatever cleanup process we have to reclaim stale locks, and then verify that you can reopen the Settings and retake the lock. That should exercise lock reclamation.

    The idea here: if you want a test to cover this, it should be a test that exercises the real-world code that incidentally was misconfigured. It shouldn’t be a contrived test that creates the specific misconfigured situation you observed.

    Would a test like that be feasible?

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Ben Hamilton
    • Justin Cohen
    Submit Requirements:
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: crashpad/crashpad
    Gerrit-Branch: main
    Gerrit-Change-Id: Idcb72ae39d289fb1037d9a8001cd6be9e781297f
    Gerrit-Change-Number: 6775604
    Gerrit-PatchSet: 6
    Gerrit-Owner: Ben Hamilton <benha...@google.com>
    Gerrit-Reviewer: Justin Cohen <justi...@chromium.org>
    Gerrit-CC: Mark Mentovai <ma...@chromium.org>
    Gerrit-Attention: Ben Hamilton <benha...@google.com>
    Gerrit-Attention: Justin Cohen <justi...@chromium.org>
    Gerrit-Comment-Date: Tue, 22 Jul 2025 19:01:10 +0000
    unsatisfied_requirement
    open
    diffy

    Ben Hamilton (Gerrit)

    unread,
    Jul 22, 2025, 3:05:11 PMJul 22
    to Mark Mentovai, Justin Cohen, crashp...@chromium.org
    Attention needed from Justin Cohen and Mark Mentovai

    Ben Hamilton added 1 comment

    File client/settings_test.cc
    Ben Hamilton

    On iOS, other than the child process part, it's pretty feasible. I'm happy to revert this change for now since the test did what I needed to to validate the fix.

    Open in Gerrit

    Related details

    Attention is currently required from:
    • Justin Cohen
    • Mark Mentovai
    Submit Requirements:
    • requirement is not satisfiedCode-Owners
    • requirement is not satisfiedCode-Review
    • requirement is not satisfiedNo-Unresolved-Comments
    Inspect html for hidden footers to help with email filtering. To unsubscribe visit settings. DiffyGerrit
    Gerrit-MessageType: comment
    Gerrit-Project: crashpad/crashpad
    Gerrit-Branch: main
    Gerrit-Change-Id: Idcb72ae39d289fb1037d9a8001cd6be9e781297f
    Gerrit-Change-Number: 6775604
    Gerrit-PatchSet: 6
    Gerrit-Owner: Ben Hamilton <benha...@google.com>
    Gerrit-Reviewer: Justin Cohen <justi...@chromium.org>
    Gerrit-CC: Mark Mentovai <ma...@chromium.org>
    Gerrit-Attention: Justin Cohen <justi...@chromium.org>
    Gerrit-Attention: Mark Mentovai <ma...@chromium.org>
    Gerrit-Comment-Date: Tue, 22 Jul 2025 19:05:08 +0000
    unsatisfied_requirement
    open
    diffy
    Reply all
    Reply to author
    Forward
    0 new messages