)]}'
{
  "commit": "719e97414a7ca1a4d49d72816b9e1bd2155d157d",
  "tree": "6c3d4456e89d1a837322566eee065e492b325e6c",
  "parents": [
    "27da3988c30c333cd75cffc5565682366bb99513"
  ],
  "author": {
    "name": "ajs",
    "email": "ajs",
    "time": "Mon Feb 28 20:52:15 2005 +0000"
  },
  "committer": {
    "name": "ajs",
    "email": "ajs",
    "time": "Mon Feb 28 20:52:15 2005 +0000"
  },
  "message": "2005-02-28 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* zserv.c: Must include network.h and buffer.h for non-blocking I/O.\n\t  Remove global message_queue and t_write (need separate buffering for\n\t  each client).\n\t  (zebra_server_dequeue,zebra_server_enqueue) Remove functions\n\t  related to old buggy buffering code.\n\t  (zserv_delayed_close) New thread callback function to delete a client.\n\t  (zserv_flush_data) New thread callback function to flush buffered\n\t  data to client.\n\t  (zebra_server_send_message) Rewritten to use buffer_write (so\n\t  buffering of writes and non-blocking I/O work properly).\n\t  (zsend_interface_add,zsend_interface_delete,zsend_interface_address,\n\t  zsend_interface_update) Return 0 instead of -1 if !client-\u003eifinfo\n\t  (this is not really an error).  Return value from\n\t  zebra_server_send_message.\n\t  (zsend_route_multipath,zsend_ipv4_nexthop_lookup,\n\t  zsend_ipv4_import_lookup) Return value from zebra_server_send_message.\n\t  (zsend_ipv6_nexthop_lookup) Fix scope to static, and return value\n\t  from zebra_server_send_message.\n\t  (zsend_router_id_update) Must use zebra_server_send_message instead\n\t  of deprecated writen function.  Return 0 instead of -1 if this client\n\t  is not subscribed to router-id updates (since this is not really\n\t  an error).\n\t  (zread_interface_add) Change type to static int.  If\n\t  zsend_interface_add fails or zsend_interface_address fails, return -1\n\t  immediately (since the client has had an I/O error).\n\t  (zread_interface_delete,zread_ipv4_add,zread_ipv4_delete,\n\t  zread_ipv6_add,zread_ipv6_delete,zread_router_id_delete) Return 0\n\t  to indicate success.\n\t  (zread_ipv4_nexthop_lookup) Return value from\n\t  zsend_ipv4_nexthop_lookup.\n\t  (zread_ipv4_import_lookup) Return value from zsend_ipv4_import_lookup.\n\t  (zebra_read_ipv6) Remove unused function.\n\t  (zread_ipv6_nexthop_lookup) Return value from\n\t  zsend_ipv6_nexthop_lookup.\n\t  (zread_router_id_add) Return value from zsend_router_id_update.\n\t  (zebra_client_close) Call buffer_free(client-\u003ewb) and\n\t  thread_cancel(client-\u003et_suicide).\n\t  (zebra_client_create) Allocate client-\u003ewb using buffer_new.\n\t  (zebra_client_read) Support non-blocking I/O by using stream_read_try.\n\t  Use ZEBRA_HEADER_SIZE instead of 3.\n\t  (zebra_accept) Fix bug: reset accept thread at top.  Make client\n\t  socket non-blocking using the set_nonblocking function.\n\t  (config_write_forwarding) Fix scope to static.\n\t  (zebra_init) Remove initialization code for old buggy write buffering.\n\t* zserv.h: Add 2 new fields to struct zserv: struct buffer *wb\n\t  (to enable buffered writes with non-blocking I/), and\n\t  struct thread *t_suicide to support delayed close on I/O\n\t  errors.\n\t* router-id.h: Remove prototypes for zread_router_id_add and\n\t  zread_router_id_delete (their scope should be static to zserv.c).\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f29d2eac401dda3a012d15e0e843c013803bc73c",
      "old_mode": 33188,
      "old_path": "zebra/ChangeLog",
      "new_id": "a93f886ee1b1c78e77df3bff4bf4bb4168f07c95",
      "new_mode": 33188,
      "new_path": "zebra/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "7f7a8c3b2af44032c4b60a3fe9129593f9ee4548",
      "old_mode": 33188,
      "old_path": "zebra/router-id.h",
      "new_id": "be12bf502965bb63d7c503183ede7b62ac694f3a",
      "new_mode": 33188,
      "new_path": "zebra/router-id.h"
    },
    {
      "type": "modify",
      "old_id": "e74248b19afcf23c1f64c4aa21e5d3ec5c0c1ece",
      "old_mode": 33188,
      "old_path": "zebra/zserv.c",
      "new_id": "caebe490a55dbf09a139f4cd02b19493682f62db",
      "new_mode": 33188,
      "new_path": "zebra/zserv.c"
    },
    {
      "type": "modify",
      "old_id": "620e24dda7cec364a02e88d39c7f22db5dac6012",
      "old_mode": 33188,
      "old_path": "zebra/zserv.h",
      "new_id": "445dc766577e788021654b90b2aeaec073ba906e",
      "new_mode": 33188,
      "new_path": "zebra/zserv.h"
    }
  ]
}
