)]}'
{
  "commit": "eb3da6dfa92be8083bbe1b4436818754be158b93",
  "tree": "72067c3eb6ec2f5fd1678d555062424f163c6599",
  "parents": [
    "3623814abc4df8435d2fc50697c6d7fc66f21088"
  ],
  "author": {
    "name": "paul",
    "email": "paul",
    "time": "Tue Oct 18 04:20:33 2005 +0000"
  },
  "committer": {
    "name": "paul",
    "email": "paul",
    "time": "Tue Oct 18 04:20:33 2005 +0000"
  },
  "message": "2005-10-18 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) SPF memory management cleanup and fix for rare\n\t  double-free bug.\n\t* ospf_spf.h: (struct vertex_parent) New struct to hold parent\n\t  specific data, eg the backlink and the parent vertex pointer,\n\t  and point to the appropriate general struct vertex_nexthop.\n\t  (struct vertex_nexthop) remove parent vertex pointer, so\n\t  this struct can be shared across vertices.\n\t  (struct vertex) rename list child to list children. Remove\n\t  list of nexthops, replace with list of vertex_parents.\n\t* ospf_spf.c: (update_stat) trivial, remove cast from void *.\n\t  (vertex_nexthop_new) remove init of parent - field is gone\n          from struct vertex_nexthop.\n          (ospf_canonical_nexthops_free) Remove the canonical\n          vertex_nexthop memory objects. These are the vertex_nexthops\n          attached to the first level of router vertices from the root.\n          (vertex_parent_new) new function, create a vertex_parent.\n          (vertex_parent_free) ditto, but free it.\n          (ospf_vertex_new) Update to match changes to struct vertex.\n          (ospf_vertex_free) Recursively free a struct vertex and its\n          children. The parent list is used as a reference count.\n          vertex_nexthops must be free seperately, if required.\n          (ospf_vertex_dump) update to match struct vertex changes.\n          Print out backlink of parents too.\n          (ospf_vertex_add_parent) ditto.\n          (ospf_lsa_has_link) update comment.\n          (ospf_nexthop_add_unique) removed, not needed anymore.\n          (ospf_nexthop_merge) ditto.\n          (ospf_spf_consider_nexthop) renamed to ospf_spf_add_parent.\n          Simplified to just create vertex_parent and add it.\n          (ospf_spf_flush_parents) new function, flush out the parent\n\t  list.\n\t  (ospf_nexthop_calculation) Take the relevant route_lsa_link\n\t  as an argument, which simplifies things and removes the need\n\t  for the hack in ospf_nexthop_add_unique - ospf_spf_next\n\t  already knew exactly which link the cost calculated was for.\n\t  Update to match struct vertex changes too.\n\t  (ospf_spf_next) Don\u0027t create a vertex for W unnecessarily, if\n          it\u0027s there\u0027s a vertex already created for W, use it, and\n          hence there\u0027s no need to free it either.\n          Update some manipulation/comparisons of distance to match.\n          Flush the parent list if a lower cost path is found.\n          (ospf_spf_route_free) unused, removed.\n          (ospf_spf_dump) match the struct vertex changes, and dump the\n          ifname if possible.\n          (ospf_spf_calculate) At end of SPF, free the canonical nexthops\n          and call ospf_vertex_free on the root vertex to free the\n\t  entire tree.\n\t* ospf_interface.c: (ospf_vl_set_params) match struct vertex\n          changes.\n        * ospf_route.c: (ospf_intra_route_add) ditto\n          (ospf_route_copy_nexthops_from_vertex) ditto\n\t* memtypes.c: (memory_list_ospf) Add MTYPE_OSPF_VERTEX_PARENT.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "956b10ebf2b8c43aca7afd88a8d3699c31b68627",
      "old_mode": 33188,
      "old_path": "lib/ChangeLog",
      "new_id": "aea7e87dfd1a6d34a7d284800730f02dd6eef4df",
      "new_mode": 33188,
      "new_path": "lib/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "45c07dad858d749ebefd880469b2d46402cf7d88",
      "old_mode": 33188,
      "old_path": "lib/memtypes.c",
      "new_id": "f7c07fbba356781273db4236dbd8b4f0566d9997",
      "new_mode": 33188,
      "new_path": "lib/memtypes.c"
    },
    {
      "type": "modify",
      "old_id": "c56f01bb9ef4d97da107c23e77c8eaf791226fc3",
      "old_mode": 33188,
      "old_path": "ospfd/ChangeLog",
      "new_id": "299de23c7cf136b6bf8560eb44beffd19fc55250",
      "new_mode": 33188,
      "new_path": "ospfd/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "9d31b7a37f946a832a3c0c351a92e174b6e954c9",
      "old_mode": 33188,
      "old_path": "ospfd/ospf_interface.c",
      "new_id": "fe32268ff3e0b42b56a92328c07a3b408a67c2cd",
      "new_mode": 33188,
      "new_path": "ospfd/ospf_interface.c"
    },
    {
      "type": "modify",
      "old_id": "00733d8449c5e9dd70c0c565bfe6674042d3860e",
      "old_mode": 33188,
      "old_path": "ospfd/ospf_route.c",
      "new_id": "bdbdd03ea8184430ec98a7a1489d5fc42fc29bb2",
      "new_mode": 33188,
      "new_path": "ospfd/ospf_route.c"
    },
    {
      "type": "modify",
      "old_id": "1aba5d979d358be62e0a4e69bef7166dd5fbe4cd",
      "old_mode": 33188,
      "old_path": "ospfd/ospf_spf.c",
      "new_id": "b05117dae31a64d057053dc13adde8ee9cfd5fab",
      "new_mode": 33188,
      "new_path": "ospfd/ospf_spf.c"
    },
    {
      "type": "modify",
      "old_id": "1aa871aedae4f3c129d05a39f4c9b97e96205201",
      "old_mode": 33188,
      "old_path": "ospfd/ospf_spf.h",
      "new_id": "50e590d6ca4f286f2de5122b93516b2072f36954",
      "new_mode": 33188,
      "new_path": "ospfd/ospf_spf.h"
    }
  ]
}
