)]}'
{
  "commit": "f1c192e01fd60ee4066b5b3ea260c6bd0bc3894b",
  "tree": "1139baf2cfece78d665d86fa40cf64b4737b873d",
  "parents": [
    "858e20a6334d4bb14b2d10bfa5cf8d4b2251b925"
  ],
  "author": {
    "name": "Taylor Cramer",
    "email": "cramertj@pigweed.infra.roller.google.com",
    "time": "Thu May 25 18:23:54 2023 +0000"
  },
  "committer": {
    "name": "CQ Bot Account",
    "email": "pigweed-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Thu May 25 18:23:54 2023 +0000"
  },
  "message": "[roll third_party/pigweed] pw_rpc: Add destructor to stateful Call subclasses\n\nb5f8cd9 moved waiting for callback completion from Call\u0027s destructors\ninto the destructors of some subclasses. This helped ensure that the\ncallbacks were completed prior to the destruction of fields referenced\nby those callbacks.\n\nHowever, that change missed a number of classes, and applied the\ndestructor to some classes where no extra state was carried (except\ntransitively through parent classes). This resulted in some bugs,\nnotably b/282138354.\n\nThis change moves the DestroyClientCall and DestroyServerCall\ninvocations into two places:\n - The destructors of any stateful Call subclasses (those subclasses\n   whose fields may be referenced by the callbacks).\n - The destructors of ServerCall and ClientCall (to guard the stateful\n   `Call` class appropriately in the case of classes whose heirarchy\n   would not otherwise have invoked `DestroyXXXCall`).\n\nThis results in some duplication, notably between classes where multiple\nlayers in the inheritance tree are stateful: each stateful layer will\n`DestroyXXXCall`. However, the alternative is leaving intermediate\nclasses unprotected, which makes it undefined behavior to create an\ninstance of such an intermediate class, and makes it hard to track\nwhether the final subclasses are properly protected: they must include a\ndestructor if and only if their parents had state and did *not* include\na destructor. This condition is much too complex to validate, especially\ngiven that Call has 40+ subclasses, many with four-deep inheritance.\n\nAfter this CL, it should be easy to check a class for correctness:\nit must include a `DestroyXXXCall`-invoking destructor if it has a field\nwhose state may be referenced from a callback.\n\nOriginal-Bug: b/282138354\nOriginal-Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/148110\n\nhttps://pigweed.googlesource.com/pigweed/pigweed\nthird_party/pigweed Rolled-Commits: 0d5b4d933a0c457..ea55bee9faa2b0f\nRoller-URL: https://ci.chromium.org/b/8780104038322576993\nGitWatcher: ignore\nCQ-Do-Not-Cancel-Tryjobs: true\nChange-Id: I195f2389285198b7477a353280ce400f2a93ded4\nReviewed-on: https://pigweed-review.googlesource.com/c/pigweed/experimental/+/148934\nBot-Commit: Pigweed Integration Roller \u003cpigweed-integration-roller@pigweed.google.com.iam.gserviceaccount.com\u003e\nCommit-Queue: Pigweed Integration Roller \u003cpigweed-integration-roller@pigweed.google.com.iam.gserviceaccount.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "0d5b4d933a0c457c6b8d9f3083627367697bc446",
      "old_mode": 57344,
      "old_path": "third_party/pigweed",
      "new_id": "ea55bee9faa2b0f0249b3236355e6649c3e70da0",
      "new_mode": 57344,
      "new_path": "third_party/pigweed"
    }
  ]
}
