)]}'
{
  "commit": "634f9ea20fce82c94407cb677b5487b65bde1973",
  "tree": "32db82e4ae3b0f409d6d06a0fda401f9d5df5cc9",
  "parents": [
    "dfb9a545f8e3500e6a99518193872f526c1f56ba"
  ],
  "author": {
    "name": "ajs",
    "email": "ajs",
    "time": "Mon Apr 11 15:51:40 2005 +0000"
  },
  "committer": {
    "name": "ajs",
    "email": "ajs",
    "time": "Mon Apr 11 15:51:40 2005 +0000"
  },
  "message": "2005-04-11 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\tImplement non-blocking zclient I/O with buffering.\n\t* zclient.h (struct zclient): Add two fields to support non-blocking\n\t  I/O: struct buffer *wb, and struct thread *t_write.\n\t  (zclient_free): Remove function.\n\t  (zebra_redistribute_send): Change 2nd arg from socket fd to\n\t  struct zclient * (needed to support non-blocking I/O and buffering).\n\t  (zclient_send_message): New function to send an arbitrary\n\t  message with non-blocking I/O.\n\t* zclient.c (zclient_new): Create write buffer.\n\t  (zclient_free): Remove unused function.\n\t  (zclient_stop): Must cancel new t_write thread.  Also, reset\n\t  all buffers: ibuf, obuf, and wb.\n\t  (zclient_failed): New helper function for typical error handling.\n\t  (zclient_flush_data): New thread to flush queued data.\n\t  (zclient_send_message): New function to send the message in\n\t  zclient-\u003eobuf to zebra using non-blocking I/O and buffering.\n\t  (zebra_message_send, zapi_ipv4_route, zapi_ipv6_route): Use\n\t  new zclient_send_message function instead of calling writen.\n\t  (zclient_start): Set socket non-blocking.  Also, change 2nd arg\n\t  to zebra_redistribute_send from zclient-\u003esock to zclient.\n\t  (zebra_redistribute_send): Change 2nd arg to struct zclient *.\n\t  Can now use zclient-\u003eobuf to assemble the message instead of\n\t  allocating a temporary stream.  And call zclient_send_message to\n\t  send the message instead of writen.\n\t  (zclient_read): Convert to support non-blocking I/O by using\n\t  stream_read_try instead of deprecated stream_read.\n\t  (zclient_redistribute): Change 2nd arg to zebra_redistribute_send\n\t  from zclient-\u003esock to zclient.\n\t* ospf6_zebra.c (ospf6_zebra_redistribute, ospf6_zebra_no_redistribute):\n\t  Change 2nd arg to zebra_redistribute_send from zclient-\u003esock\n\t  to zclient.\n\t* ospf_zebra.c (ospf_zebra_add): Call zclient_send_message instead\n\t  of writen.\n\t* rip_zebra.c (rip_redistribute_set, rip_redistribute_unset,\n\t  rip_redistribute_clean): Change 2nd arg to zebra_redistribute_send\n\t  from zclient-\u003esock to zclient.\n\t* ripng_zebra.c (ripng_redistribute_unset, ripng_redistribute_clean):\n\t  Change 2nd arg to zebra_redistribute_send from zclient-\u003esock\n\t  to zclient.\n\t* bgp_zebra.c (bgp_redistribute_set, bgp_redistribute_unset):\n\t  The 2nd arg to zebra_redistribute_send is now zclient instead of\n\t  zclient-\u003esock.\n\t* isis_zebra.h (isis_zebra_finish): Remove declaration of unused\n\t  function.\n\t* isis_zebra.c (isis_zebra_route_add_ipv4): Call zclient_send_message\n\t  to send the message to zebra instead of calling writen directly, since\n\t  zclient_send_message understands non-blocking I/O and will manage\n\t  the buffer queue appropriately.\n\t  (isis_zebra_finish): Remove unused function, particularly since\n\t  the zclient_free function has been removed.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f90bed9dfb92820b5d9b487198931daaa63b4ce0",
      "old_mode": 33188,
      "old_path": "bgpd/ChangeLog",
      "new_id": "3149f68c2a0ebfd22ccd58c1116b0508908e80f0",
      "new_mode": 33188,
      "new_path": "bgpd/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "0c0c8c0c791e38ae6d4e38d470d05870a5ed64ff",
      "old_mode": 33188,
      "old_path": "bgpd/bgp_zebra.c",
      "new_id": "b4496e21bd6452e848e1d5152cd0977f60cc181e",
      "new_mode": 33188,
      "new_path": "bgpd/bgp_zebra.c"
    },
    {
      "type": "modify",
      "old_id": "38ab2fcb57446fe82fe431e71984f872b1a5857c",
      "old_mode": 33188,
      "old_path": "isisd/ChangeLog",
      "new_id": "e4792d8966af4e067f420410d1f71e19bac251c7",
      "new_mode": 33188,
      "new_path": "isisd/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "f45b9c13846e703a3357068e6ceb16cb8aab22f1",
      "old_mode": 33188,
      "old_path": "isisd/isis_zebra.c",
      "new_id": "889c5bfb98deda20f758de8d9ad823dbe628fdd8",
      "new_mode": 33188,
      "new_path": "isisd/isis_zebra.c"
    },
    {
      "type": "modify",
      "old_id": "0dce79957499e314a2488c24efd7fa98fe2e8172",
      "old_mode": 33188,
      "old_path": "isisd/isis_zebra.h",
      "new_id": "889cd9b62f80a7dca3a5d886624d6b0deef6e985",
      "new_mode": 33188,
      "new_path": "isisd/isis_zebra.h"
    },
    {
      "type": "modify",
      "old_id": "97b7fb226c92a99547197eb943e621b823b48d59",
      "old_mode": 33188,
      "old_path": "lib/ChangeLog",
      "new_id": "2bacff1e241fc223d6f2c411b5918e8e07f7f26a",
      "new_mode": 33188,
      "new_path": "lib/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "efcad57f644a6eaebdbc6938bb11ec40385f13d6",
      "old_mode": 33188,
      "old_path": "lib/zclient.c",
      "new_id": "cd99b843236b08c346452ea6d93c38adc76764a0",
      "new_mode": 33188,
      "new_path": "lib/zclient.c"
    },
    {
      "type": "modify",
      "old_id": "d18cf628c9bd45862c76c79b126becafdc7152f4",
      "old_mode": 33188,
      "old_path": "lib/zclient.h",
      "new_id": "aa9f75c296ebe06c246453f948c4b6c3527868f2",
      "new_mode": 33188,
      "new_path": "lib/zclient.h"
    },
    {
      "type": "modify",
      "old_id": "bc04cc9434ef3bc0ca7342557186011ee9964579",
      "old_mode": 33188,
      "old_path": "ospf6d/ChangeLog",
      "new_id": "c2dac1c4116156abffa1a6de269292fb8b393443",
      "new_mode": 33188,
      "new_path": "ospf6d/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "1ce362983fc127b9b59d04f8f86a5d4eb0d4880c",
      "old_mode": 33188,
      "old_path": "ospf6d/ospf6_zebra.c",
      "new_id": "bb3245925204ee4933b0716bdb71950eb5994fb8",
      "new_mode": 33188,
      "new_path": "ospf6d/ospf6_zebra.c"
    },
    {
      "type": "modify",
      "old_id": "89fb9b419cf0a785ce7ba7b52e5792cf15d52770",
      "old_mode": 33188,
      "old_path": "ospfd/ChangeLog",
      "new_id": "1039e53f7c1c6c80b6beced85ae58a3c49069f41",
      "new_mode": 33188,
      "new_path": "ospfd/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "e8513b39668fc13c13eb55fe11347ed3eefb2456",
      "old_mode": 33188,
      "old_path": "ospfd/ospf_zebra.c",
      "new_id": "36e787747b73af0f66d4b2347b4f5449bbd416b1",
      "new_mode": 33188,
      "new_path": "ospfd/ospf_zebra.c"
    },
    {
      "type": "modify",
      "old_id": "132fd43aeaea87f3fa461b958b5a128a31b284cf",
      "old_mode": 33188,
      "old_path": "ripd/ChangeLog",
      "new_id": "80181d2277c920ed84037a751ef8717a23cdd72d",
      "new_mode": 33188,
      "new_path": "ripd/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "d66a776223c83e0c6076e30a265f541472bff074",
      "old_mode": 33188,
      "old_path": "ripd/rip_zebra.c",
      "new_id": "734555b765da11670a003a395aa1c38a92ee5212",
      "new_mode": 33188,
      "new_path": "ripd/rip_zebra.c"
    },
    {
      "type": "modify",
      "old_id": "ee13c92755adaf7d86493d3d429dbe818ed50a82",
      "old_mode": 33188,
      "old_path": "ripngd/ChangeLog",
      "new_id": "8f874e0eede6cc899b2b8674601539a97a79bc9e",
      "new_mode": 33188,
      "new_path": "ripngd/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "6e582599113bc90eccb3554cf020f076beefb93e",
      "old_mode": 33188,
      "old_path": "ripngd/ripng_zebra.c",
      "new_id": "51e73a0100bfa6166e029c90bb0239ff223e940d",
      "new_mode": 33188,
      "new_path": "ripngd/ripng_zebra.c"
    }
  ]
}
