)]}'
{
  "commit": "873422314254ef6186dea157d15d33cea29dd7bc",
  "tree": "00e91a0d5fd8550eb33cf972bfb3a3d482519bc3",
  "parents": [
    "81dab9f25cb2381400c237fdea7030d5068f9a73"
  ],
  "author": {
    "name": "Andrew Grieve",
    "email": "agrieve@google.com",
    "time": "Tue Jun 17 23:08:09 2025 -0400"
  },
  "committer": {
    "name": "GN LUCI",
    "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Wed Jun 18 05:55:35 2025 -0700"
  },
  "message": "Fix bug in Grow logic in HashTableBase\n\nNodeLookup() returns only when a null slot is found, but if tombstones\naccumulate, it can infinite loop due to no null slots existing.\n\nThis changes the hash table to track the number of tombstones, and grow\nwhen the number of null entries is \u003c 25%.\n\nThis bug does not affect any existing uses of PointerSet, since it\nhappens only for sets that alternate between add() and erase() (which\nafaict, no existing uses do).\n\nChange-Id: I846ae0468faa8084d84d0c042bfaf5a06995e4f6\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/19160\nReviewed-by: David Turner \u003cdigit@google.com\u003e\nCommit-Queue: Andrew Grieve \u003cagrieve@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "58ce7126010ea717874ca135bdd366c4af56c237",
      "old_mode": 33188,
      "old_path": "src/gn/builder_record_map.h",
      "new_id": "77f0695e98e48e933ca72a6552cb583fab08b475",
      "new_mode": 33188,
      "new_path": "src/gn/builder_record_map.h"
    },
    {
      "type": "modify",
      "old_id": "4e9e347f4f08509b1d56e7f4e5bfb8d478bd824a",
      "old_mode": 33188,
      "old_path": "src/gn/hash_table_base.h",
      "new_id": "7e5b34ede6525e4fc7780e3ada4749065613146a",
      "new_mode": 33188,
      "new_path": "src/gn/hash_table_base.h"
    },
    {
      "type": "modify",
      "old_id": "d6324cfff4d29b1fc693227906f83f1755da8b73",
      "old_mode": 33188,
      "old_path": "src/gn/hash_table_base_unittest.cc",
      "new_id": "7acbfbe344c9e1230081c594ea9d157c6beffe70",
      "new_mode": 33188,
      "new_path": "src/gn/hash_table_base_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "705b8922d603a3c31302d0fe0e161acddb0e986d",
      "old_mode": 33188,
      "old_path": "src/gn/header_checker.cc",
      "new_id": "05c74d652ee0e48844efeabaee77b22cf100580d",
      "new_mode": 33188,
      "new_path": "src/gn/header_checker.cc"
    },
    {
      "type": "modify",
      "old_id": "2bec930b04a9779b81ce66f9398554e305725b2d",
      "old_mode": 33188,
      "old_path": "src/gn/pointer_set.h",
      "new_id": "6a4ec62a650306f644036a3c4614b41f76ec4642",
      "new_mode": 33188,
      "new_path": "src/gn/pointer_set.h"
    },
    {
      "type": "modify",
      "old_id": "36f912f2cc9ebce8310f0d2c891fd516cdd2f42d",
      "old_mode": 33188,
      "old_path": "src/gn/string_atom.cc",
      "new_id": "71f9b875e2e42310ae2cef9d75591b8d13032046",
      "new_mode": 33188,
      "new_path": "src/gn/string_atom.cc"
    },
    {
      "type": "modify",
      "old_id": "473786d4a0eabbf8f2578bb66965bd660373be5a",
      "old_mode": 33188,
      "old_path": "src/gn/unique_vector.h",
      "new_id": "30246134d671ddbb3bedeb8b96ec0a9b94c08210",
      "new_mode": 33188,
      "new_path": "src/gn/unique_vector.h"
    },
    {
      "type": "modify",
      "old_id": "e614b66912c1ea7bf4b358040ce471471a66267c",
      "old_mode": 33188,
      "old_path": "src/util/msg_loop.cc",
      "new_id": "117daf891a8c416569590cbaead3d060ef25e06d",
      "new_mode": 33188,
      "new_path": "src/util/msg_loop.cc"
    }
  ]
}
