)]}'
{
  "commit": "a48b4e6d074a4e61ce9e8bf78fdb8ea9c57c6e64",
  "tree": "7967366e5c4c650d36fbaa1cf5f9d30584ff9846",
  "parents": [
    "cb0663c41a5c61c6261f6d5607526e56be0ed2d4"
  ],
  "author": {
    "name": "paul",
    "email": "paul",
    "time": "Fri Apr 22 00:43:47 2005 +0000"
  },
  "committer": {
    "name": "paul",
    "email": "paul",
    "time": "Fri Apr 22 00:43:47 2005 +0000"
  },
  "message": "2005-04-22 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* thread.h: Add background thread type and thread_add_background\n\t  macro and accompanying funcname_... function.\n\t  export thread_should_yield, background threads can use it.\n\t  Lower thread yield time to 10ms, 100ms is noticeable lag and\n\t  a thread would only be /starting/ to finish sometime afterward.\n\t* thread.c: (general) Add background thread type and schedule\n\t  nearly all thread types through the ready list for fairness.\n\t  (timeval_adjust) static qualifier missing\n\t  (vty_out_cpu_thread_history) add support for printout of\n\t  background threads\n\t  (show_thread_cpu) ditto.\n\t  (thread_master_debug) add debug of background list\n\t  (thread_master_create) fixup long line\n\t  (thread_add_unuse) add asserts for required state.\n\t  (thread_master_free) free background thread list\n\t  (funcname_thread_add_timer_timeval) make generic, able to\n\t  support arbitrary timer-like thread types.\n\t  (funcname_thread_add_timer) pass thread type to .._add_timer_timeval\n\t  (funcname_thread_add_timer_msec) ditto\n\t  (funcname_thread_add_background) Add a background thread, with an\n\t  optional millisecond delay factor, using .._add_timer_timeval.\n\t  (thread_cancel) Add background thread type.\n\t  Move the thread_list_delete common to all cases to bottom of\n\t  function, after the switch statement..\n\t  (thread_cancel_event) indent\n\t  (thread_timer_wait) Static qualifier, and make it able to cope\n\t  with arbitrary timer-like thread lists, so its of use to\n\t  background threads too.\n\t  (thread_process_fd) static qualifier. Again, make it take a list\n\t  reference rather than thread_master. Fix indentation.\n\t  (thread_timer_process) Check for ready timer-like threads in the\n\t  given list and move them on to the ready list - code originally\n\t  embedded in thread_fetch.\n\t  (thread_fetch) Schedule all threads, other than events, through\n\t  the ready list, to ensure fairness. Timer readying code moved to\n\t  thread_timer_process so it can be reused for background threads.\n\t  Remove the unneeded quagga_sigevent_process, as pointed out by\n\t  John Lin \u003cjohn.ch.lin@gmail.com\u003e.\n\t  (thread_should_yield) make this available.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d8328499ee2dd7e8744b79a5cd6f7638a4e025bc",
      "old_mode": 33188,
      "old_path": "lib/ChangeLog",
      "new_id": "3bd151bfbaaa80c70accafcee969cb77290bd308",
      "new_mode": 33188,
      "new_path": "lib/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "d1c925c4983df6bc358c4bcaa385b596138c77c4",
      "old_mode": 33188,
      "old_path": "lib/thread.c",
      "new_id": "333312424c683ba5131a7e450ebe41c90729dc61",
      "new_mode": 33188,
      "new_path": "lib/thread.c"
    },
    {
      "type": "modify",
      "old_id": "4008ba726017fe26ba170f30dcfdf4a600d6233b",
      "old_mode": 33188,
      "old_path": "lib/thread.h",
      "new_id": "8f683c8bd06967a013b3244e8d3bd8c8d43bc045",
      "new_mode": 33188,
      "new_path": "lib/thread.h"
    }
  ]
}
