)]}'
{
  "commit": "fff7033e9cc337f2ab4fe8629a61c0c66bdb5cff",
  "tree": "0ee89f108b8d693732bbc633561f3986ea6f9a24",
  "parents": [
    "da09262e57393f2e0349b38b36cf2fe9cef9f9c5"
  ],
  "author": {
    "name": "Christopher R. Johnson",
    "email": "crjohns@google.com",
    "time": "Wed Oct 28 18:50:48 2026 -0700"
  },
  "committer": {
    "name": "fuchsia-internal-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "email": "fuchsia-internal-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Wed Oct 28 18:50:48 2026 -0700"
  },
  "message": "[kernel] Honor signal_mask in wait_queue preamble\n\nAdd `Thread::check_kill_or_suspend_signal_mask(signal_mask)` in\n`zircon/kernel/kernel/thread.rs` and call it from\n`ChainLockProof::block_etc_preamble_with_ptr` in\n`zircon/kernel/kernel/wait_queue.rs`.\n\nPreviously, when `(signals \u0026 !signal_mask) !\u003d 0` evaluated to true,\n`block_etc_preamble_with_ptr` called `check_kill_or_suspend_signal()`\nwithout masking `signal_mask`. In callers that mask\n`THREAD_SIGNAL_SUSPEND` (such as\n`ExceptionDispatcher::wait_for_handle_close()`), if another unmasked\nsignal was also pending (such as `THREAD_SIGNAL_RESTRICTED_KICK`) when\nthe process was suspended, the wait was repeatedly interrupted with\n`ZX_ERR_INTERNAL_INTR_RETRY` instead of blocking, turning the wait loop\ninto an infinite kernel spin loop.\n\nAdd unit tests in `thread.rs` and `wait_queue.rs` verifying that masked\nsignals are ignored even when other unmasked signals are pending.\n\nFixed: 578625482\nBug: 577254483\nTest: k ut thread_rust\nTest: k ut wait_queue\nChange-Id: I4963543f971f7d9ecea56e91c1a84d86bb2c0c3c\nReviewed-on: https://fuchsia-review.googlesource.com/c/fuchsia/+/1925670\nReviewed-by: Corey Tabaka \u003ceieio@google.com\u003e\nReviewed-by: Nick Maniscalco \u003cmaniscalco@google.com\u003e\nCommit-Queue: Christopher Johnson \u003ccrjohns@google.com\u003e\nFuchsia-Auto-Submit: Christopher Johnson \u003ccrjohns@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "91a4709b80581cc962513f481def7b71f066fdd5",
      "old_mode": 33188,
      "old_path": "zircon/kernel/kernel/thread.rs",
      "new_id": "3e2379fceedc3aa381bed5695df482e00d83c04f",
      "new_mode": 33188,
      "new_path": "zircon/kernel/kernel/thread.rs"
    },
    {
      "type": "modify",
      "old_id": "adde512e0ca4c4db8a66880fd477d7a829fc44c6",
      "old_mode": 33188,
      "old_path": "zircon/kernel/kernel/wait_queue.rs",
      "new_id": "8a5f6e47256f61d487c5b59afdefdbfe7c2aa052",
      "new_mode": 33188,
      "new_path": "zircon/kernel/kernel/wait_queue.rs"
    }
  ]
}
