)]}'
{
  "commit": "aa354d8fba290e526c084ff49a8a226aa260f9af",
  "tree": "2dd3bcb6ed29c405d3f6fcf56adce6daae2bdfab",
  "parents": [
    "b61a72a726f10b555057f4ffd6173ddb32e560e0"
  ],
  "author": {
    "name": "Marc Kupietz",
    "email": "kupietz@ids-mannheim.de",
    "time": "Fri Jul 31 09:17:57 2026 +0900"
  },
  "committer": {
    "name": "Marc Kupietz",
    "email": "kupietz@ids-mannheim.de",
    "time": "Fri Jul 31 09:17:57 2026 +0900"
  },
  "message": "Fix two memory leaks in the collocator lookup\n\nEvery collocator lookup leaked a rocksdb iterator and 80 bytes of window sums:\n\nCollocatorIterator takes the iterator that SeekIterator() gets from\nDB::NewIterator(), but had no destructor, so the compiler generated one that\ndoes not touch the raw pointer. The wrapper was deleted by its unique_ptr, the\niterator it wrapped was not, together with everything it pins.\n\nget_collocators() allocated its fixed size sumWindow array with malloc() and\nnever freed it. It is a fixed size, so it lives on the stack now.\n\nMeasured with 20000 calls of get_collocators_as_json() on the test database:\n3.63 kB per call before, no measurable growth at all afterwards. The 80 bytes\nwere per call regardless of the result size, which is what gave them away.\n\nCo-Authored-By: Claude Opus 5 \u003cnoreply@anthropic.com\u003e\nChange-Id: I1b1148ada81bd821784b8e327334fc3bafe29e1b\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b46d536b765c9d6547174c61fb8180a621b247cb",
      "old_mode": 33188,
      "old_path": "src/collocatordb.cc",
      "new_id": "30656fcfb3ca06f2d033904c06aef72182f63c8c",
      "new_mode": 33188,
      "new_path": "src/collocatordb.cc"
    }
  ]
}
