)]}'
{
  "commit": "17f2fc3fe1400bf9e45c075e4864cc79afa2ed91",
  "tree": "2e6e4082256eb7a7941c0b28347783d5f2e78ef3",
  "parents": [
    "d20e2370f23a94c26ac5aec1c18fda79b8c3a45a"
  ],
  "author": {
    "name": "Ender Hsieh",
    "email": "andhsieh@nvidia.com",
    "time": "Mon Sep 21 19:01:19 2026 +0900"
  },
  "committer": {
    "name": "Ender Hsieh",
    "email": "andhsieh@nvidia.com",
    "time": "Mon Sep 21 23:11:43 2026 +0900"
  },
  "message": "nvidia-gpu: drain the bus loop before the test environment tears down\n\nsdbusplus reclaims the state behind an async D-Bus call only when the\nreply is dispatched, so stopping the io_context while a reply is still\nin flight abandons it. DbusEnvironment::TearDown() does exactly that,\nwhich stays harmless for every test but the last one, since a later\ntest\u0027s pump clears the reply. HandlerDestroyedBeforeReplyIsSafe sits\nlast, so on a busy machine LeakSanitizer aborts and reports every\npassing test as a failure. Run the loop until a slice passes with\nnothing left to dispatch before stopping it, so the drain no longer\ndepends on which test happens to sit last.\n\nReproduced by running the sanitizer binary under CPU contention: with\nthe drain removed it leaked in 9 of 15 runs against 24 spinners and in\n40 of 40 against 200, while the drained build leaked in none of those\nruns. What fixes it is that the loop blocks instead of polling, not\nhow long it waits, since a 1ms slice was already clean over 15 runs;\nthe 200ms bound only caps how long teardown will sit there.\n\nChange-Id: I646cd83dfdc1287f75897bb2063850f0826d5bee\nSigned-off-by: Ender Hsieh \u003candhsieh@nvidia.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "292a132f93be6894789d366ea2df5c71d9e54e34",
      "old_mode": 33188,
      "old_path": "src/tests/nvidia-gpu/utils/DbusMockTestBase.cpp",
      "new_id": "25f0767d42e69742ae360a079538b9b3d8c06006",
      "new_mode": 33188,
      "new_path": "src/tests/nvidia-gpu/utils/DbusMockTestBase.cpp"
    }
  ]
}
