)]}'
{
  "commit": "db9c0df934e62835bc09604a7ae7932693b4254a",
  "tree": "7e382d6012701e345492756f7716d4f62030e9f8",
  "parents": [
    "f0894cf8c323a25053e1f5e82be3ea5d88c2aacb"
  ],
  "author": {
    "name": "Paul Jakma",
    "email": "paul.jakma@sun.com",
    "time": "Sun Aug 27 06:44:02 2006 +0000"
  },
  "committer": {
    "name": "Paul Jakma",
    "email": "paul.jakma@sun.com",
    "time": "Sun Aug 27 06:44:02 2006 +0000"
  },
  "message": "[lib] Bug #134: threads should be more robust against backward time jumps\n\n2006-08-25 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* thread.c: (general) Add support for monotonic clock, it may still\n\t  jump forward by huge amounts, but should be immune to going\n\t  backwards. Fixes bug #134.\n\t  (quagga_gettimeofday_relative_adjust) helper, does what name\n\t  says - adjusts gettimeofday based relative timer.\n\t  (quagga_gettimeofday) helper to keep recent_time up to date.\n\t  (quagga_get_relative) helper, update and getch the relative\n\t  timer using gettimeofday(). POSIX CLOCK_MONOTONIC is also\n\t  supported, but the code is not enabled yet nor tested.\n\t  (quagga_real_stabilised) helper, retrieve absolute time but\n\t  stabilised so as to never decrease.\n\t  (quagga_gettime) Exported interface, analogous to POSIX\n\t  clock_gettime() in interface, supporting several clocks.\n\t  (quagga_time) Exported interface, analogous to traditional\n\t  time(), will never decrease.\n\t  (recent_relative_time) Convenience function to retrieve\n\t  relative_time timeval, similar to existing recent_time absolute\n\t  timeval, for when an approximately recent value will do.\n\t  (remainder) Update to use above helpers.\n\t  (thread_getrusage) Previously was a macro, but needs to be\n\t  a function to twiddle with thread.c private stuff.\n\t* thread.c: Point the GETRUSAGE macro at previous function.\n\t  Export quagga_gettime, quagga_time and recent_relative_time for\n\t  general use.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7a744393b325df4e97230c5095be9b605f31242c",
      "old_mode": 33188,
      "old_path": "lib/ChangeLog",
      "new_id": "01f45ba5a3497d78fc95bfc00ace742989944a62",
      "new_mode": 33188,
      "new_path": "lib/ChangeLog"
    },
    {
      "type": "modify",
      "old_id": "8b6a7e2f59734af8902bef748fb9811130e83393",
      "old_mode": 33188,
      "old_path": "lib/thread.c",
      "new_id": "095dff4e2cb5f965d9b463ebf4981e2aec642ebb",
      "new_mode": 33188,
      "new_path": "lib/thread.c"
    },
    {
      "type": "modify",
      "old_id": "0670a890f1aef5647d45eb8684d4646d8e0b2aaa",
      "old_mode": 33188,
      "old_path": "lib/thread.h",
      "new_id": "1c324d86bfa84f2e982f8d1211901bfcd31908b6",
      "new_mode": 33188,
      "new_path": "lib/thread.h"
    }
  ]
}
