)]}'
{
  "log": [
    {
      "commit": "7aa9dcef80b2ce50ecaa77653d87c8b84e009c49",
      "tree": "bd4a8d881336a1551146725d7ae06b3e68553e4d",
      "parents": [
        "010ebbbca6396f272cc2d50d147dd922dda68213"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@opensourcerouting.org",
        "time": "Fri Sep 19 14:42:23 2014 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Sep 23 16:32:34 2014 +0100"
      },
      "message": "Fix most compiler warnings in default GCC build.\n\nFix lots of warnings. Some const and type-pun breaks strict-aliasing\nwarnings left but much reduced.\n\n* bgp_advertise.h: (struct bgp_advertise_fifo) is functionally identical to\n  (struct fifo), so just use that.  Makes it clearer the beginning of\n  (struct bgp_advertise) is compatible with with (struct fifo), which seems\n  to be enough for gcc.\n  Add a BGP_ADV_FIFO_HEAD macro to contain the right cast to try shut up\n  type-punning breaks strict aliasing warnings.\n* bgp_packet.c: Use BGP_ADV_FIFO_HEAD.\n  (bgp_route_refresh_receive) fix an interesting logic error in\n  (!ok || (ret !\u003d BLAH)) where ret is only well-defined if ok.\n* bgp_vty.c: Peer commands should use bgp_vty_return to set their return.\n* jhash.{c,h}: Can take const on * args without adding issues \u0026 fix warnings.\n* libospf.h: LSA sequence numbers use the unsigned range of values, and\n  constants need to be set to unsigned, or it causes warnings in ospf6d.\n* md5.h: signedness of caddr_t is implementation specific, change to an\n  explicit (uint_8 *), fix sign/unsigned comparison warnings.\n* vty.c: (vty_log_fixed) const on level is well-intentioned, but not going\n  to fly given iov_base.\n* workqueue.c: ALL_LIST_ELEMENTS_RO tests for null pointer, which is always\n  true for address of static variable.  Correct but pointless warning in\n  this case, but use a 2nd pointer to shut it up.\n* ospf6_route.h: Add a comment about the use of (struct prefix) to stuff 2\n  different 32 bit IDs into in (struct ospf6_route), and the resulting\n  type-pun strict-alias breakage warnings this causes.  Need to use 2\n  different fields to fix that warning?\n\ngeneral:\n\n* remove unused variables, other than a few cases where they serve a\n  sufficiently useful documentary purpose (e.g.  for code that needs\n  fixing), or they\u0027re required dummies.  In those cases, try mark them as\n  unused.\n* Remove dead code that can\u0027t be reached.\n* Quite a few \u0027no ...\u0027 forms of vty commands take arguments, but do not\n  check the argument matches the command being negated.  E.g., should\n  \u0027distance X \u003cprefix\u003e\u0027 succeed if previously \u0027distance Y \u003cprefix\u003e\u0027 was set?\n  Or should it be required that the distance match the previously configured\n  distance for the prefix?\n  Ultimately, probably better to be strict about this.  However, changing\n  from slack to strict might expose problems in command aliases and tools.\n* Fix uninitialised use of variables.\n* Fix sign/unsigned comparison warnings by making signedness of types consistent.\n* Mark functions as static where their use is restricted to the same compilation\n  unit.\n* Add required headers\n* Move constants defined in headers into code.\n* remove dead, unused functions that have no debug purpose.\n"
    },
    {
      "commit": "f63f06da2e7be6b17c72dd6110aae179f42f3700",
      "tree": "a36b625a9ea06d0720a240276ed1b8af33193ed7",
      "parents": [
        "651e70d7f419ee7af75113f80e688c0100e9cff5"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Apr 08 12:44:43 2011 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Fri Jan 06 16:18:18 2012 +0000"
      },
      "message": "general: remove inline qualifiers and move in-header functions to objects\n\n* (general) Move functions in headers into files, to be compiled into\n  shared object files. Remove inline qualifier from functions. Let the\n  compiler do the work.\n"
    },
    {
      "commit": "3322055b392f20f4b97122a8034e479719e4b86d",
      "tree": "eacb5bc1e5b5864241e0864b5f78e233e7b828c0",
      "parents": [
        "e276eb82820eb92d221f183496e28da4ffe0fe68"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Mon Jan 11 13:55:01 2010 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Wed Dec 08 16:53:09 2010 +0000"
      },
      "message": "lib: Make workqueue more conservative about ramping up\n\n* workqueue.c: (work_queue_run) Err more on the side of keeping granularity\n  down, by being more conservative about increasing it.\n  Also, fix mispelling.\n"
    },
    {
      "commit": "acde4b861333d799b50d6e8a53214abc0d17ede3",
      "tree": "e6fa104c7bfb45043aec82c9cab3941cb09459bd",
      "parents": [
        "5012bc3d217f4fff5759745ee689869fb5224b41"
      ],
      "author": {
        "name": "Steve Hill",
        "email": "quagga@cheesy.sackheads.org",
        "time": "Tue Jun 02 14:28:16 2009 +0100"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul@quagga.net",
        "time": "Tue Jun 02 14:28:16 2009 +0100"
      },
      "message": "[bgp] Fix crash on SIGHUP, deref of freed workqueues\n\n* lib/workqueue.c: free-ing workqueues had never been tested obviously,\n  queue\u0027s thread was not being stopped\n* bgpd/bgpd.c: null out freed workqueues, to prevent acting on freed\n  workqueues\n"
    },
    {
      "commit": "e96f92034dad1a70c92ad4ad863a5259c122cecb",
      "tree": "c3b9bebef0fe2059182b31b43243289b5c7248e3",
      "parents": [
        "a15cfd16fcdec39588ce2f780671ba7c6de0b919"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Jun 02 12:03:22 2008 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Jun 02 12:03:22 2008 +0000"
      },
      "message": "+ initial edition of meta-queue for RIB updates processing (bug #431)\n"
    },
    {
      "commit": "6ce80bdb2523ad82cef813f6d8a7e0d4daa8cfae",
      "tree": "d0b0fc8725c9f120cdcc16fa7f711d8104051815",
      "parents": [
        "3a02d1f7fb778a1ea4f45d037f13dfcd126e2337"
      ],
      "author": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Nov 12 14:55:01 2007 +0000"
      },
      "committer": {
        "name": "Denis Ovsienko",
        "email": "linux@pilot.org.ua",
        "time": "Mon Nov 12 14:55:01 2007 +0000"
      },
      "message": "+ fixed bug #418 (changing address on an existing interface doesn\u0027t cause existing static routes to be revalidated)\n"
    },
    {
      "commit": "213d8dadcae5edd424ef98bf0657874a4c44faf2",
      "tree": "15a6a1ddcae662f3a4183a6dbb386adaa731d15e",
      "parents": [
        "6cf0cf0ca400062a03c10a92d60ec3013569a383"
      ],
      "author": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:45:47 2006 +0000"
      },
      "committer": {
        "name": "Paul Jakma",
        "email": "paul.jakma@sun.com",
        "time": "Thu Mar 30 14:45:47 2006 +0000"
      },
      "message": "[lib] Trivial: fix line lengths of a comment in workqueu.c\n\n2006-03-30 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* workqueue.c: (work_queue_run) fix line length of comment\n"
    },
    {
      "commit": "306d8890439cdb9128d063ee2f77700a11e6843c",
      "tree": "fa5c8e035891cc83e9f5cfa80343df4bcac40fb7",
      "parents": [
        "3a570c8b7b56b5a3042fbc035a01c753440b927c"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Feb 02 17:50:19 2006 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Thu Feb 02 17:50:19 2006 +0000"
      },
      "message": "[lib/workqueue] remove the useless \u0027delay\u0027 factor.\n\n2006-02-02 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* workqueue.h: (struct work_queue) Remove the delay field.\n\t  It served no purpose and just introduced bad behaviour.\n\t  Should be excised before its allowed to escape into 1.0.\n\t  This removes need for the \u0027flood\u0027 and runs_since_clear\n\t  fields.\n\t* workqueue.c: (general) excise delay factor between queue\n\t  runs, hence the \u0027flood\u0027 crap too.. See above.\n\t* bgp_route.c: (bgp_{clear_node,process}_queue_init) delay\n\t  field is removed from workqueue spec.\n"
    },
    {
      "commit": "889e9311e5c900ce24eecf00fcb5b8b9d51bb020",
      "tree": "d5f3ebd53e4185157027becf01d67ace5400e24d",
      "parents": [
        "0fb58d5d7993b638fc46085944d17d3a54d66046"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Nov 14 14:46:35 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Nov 14 14:46:35 2005 +0000"
      },
      "message": "[workqueue] Update workqueue users callbacks to additional arguments\n\n2005-11-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) pass struct work-queue to callback functions.\n\t* workqueue.h: (struct work_queue) move the state flag\n\t  variables to end.\n\t  Add an opaque pointer to spec, for user-data global to the\n\t  queue.\n\t  Pass reference to work_queue to all callbacks.\n\t* workqueue.c: (work_queue_item_remove) pass ref to workqueue\n\t  to user callbacks.\n\t  (work_queue_run) ditto.\n"
    },
    {
      "commit": "190880dc790007a14911ef8c170af33a50a7a674",
      "tree": "8de89e02883f522cd5d730a416ce771fd2f23ed2",
      "parents": [
        "31a5976bb99f1875ebcfc29a6359f3a7ae81a795"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Nov 14 12:07:47 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Nov 14 12:07:47 2005 +0000"
      },
      "message": "2005-11-14 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* (general) Add state to detect queue floods.  There\u0027s no sense\n\t  trying to be sparing of CPU resources, if the queue is\n\t  flooding and using ever more memory resources. we should just\n\t  get on with clearing the queue.\n\t  The sense of delay and hold were wrong way around, fix.\n\t* workqueue.h: (struct work_queue) Add status bitfield.  Add\n\t  \u0027flood\u0027 integer to workqueue spec.  Add runs_since_clear\n\t  counter to workqueue.\n\t* workqueue.c: (work_queue_new) set defaults for delay, hold\n\t  and flood.\n\t  (work_queue_add) initial schedule should use delay, not hold.\n\t  (show_work_queues) Print flood field, conserve whitespace.\n\t  (work_queue_unplug) use delay, not hold.\n\t  (work_queue_run) consecutive runs should be seperated by hold\n\t  time, not delay.\n\t  Keep track of number of consecutive runs, go into \u0027overdrive\u0027\n\t  if queue is being flooded, we can\u0027t avoid making heavy use of\n\t  resources, better to use CPU than ever more RAM.\n"
    },
    {
      "commit": "269d74fdc39a612da8f627bf97628c68d25a16ab",
      "tree": "8add14e852e83369123ee576a995b28f006800d4",
      "parents": [
        "a94feb380df46bdfc742257648c9825e8e7b17c0"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon May 23 13:42:46 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon May 23 13:42:46 2005 +0000"
      },
      "message": "2005-05-23 Paul Jakma \u003cpaul@dishone.st\u003e\n\n\t* workqueue.h: Add a WQ_QUEUE_BLOCKED item_status return code,\n\t  to allow a queue function to indicate the queue is not\n\t  ready/blocked - rather than any problem with the item at hand.\n\t  Add a notion of being able to \u0027plug\u0027 and \u0027unplug\u0027 a queue.\n\t  Add helpers to plug/unplug a queue.\n\t  Add a completion callback, to be called when a queue is emptied.\n\t* workqueue.c: (work_queue_new) remove useless list_free.\n\t  (work_queue_schedule) new internal helper function to schedule\n\t  queue, if appropriate.\n\t  (work_queue_add) use work_queue_schedule\n\t  (show_work_queues) Print \u0027P\u0027 if queue is plugged.\n\t  (work_queue_plug) new API function, plug a queue - ie prevent it\n\t  from \u0027drained\u0027 / processed / scheduled.\n\t  (work_queue_unplug) unplug a queue, allowing it to be drained\n\t  / scheduled / processed again.\n\t  (work_queue_run) Add support for WQ_QUEUE_BLOCKED.\n\t  Add comment for RETRY_NOW case.\n\t  Make hysteris more aggresive in ramping up granularity, improves\n\t  performance significantly.\n\t  Add support for calling completion callback when queue is emptied,\n\t  possibly useful for knowing when to unplug a queue.\n"
    },
    {
      "commit": "3df537822f594ffefe4d5e121c0b2430c9c12806",
      "tree": "63f845e4b45f4010fa5f24384352fb1dade48152",
      "parents": [
        "a7bca0f5d27b9b8e6eb73890003a4f664d849188"
      ],
      "author": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Apr 27 16:29:54 2005 +0000"
      },
      "committer": {
        "name": "ajs",
        "email": "ajs",
        "time": "Wed Apr 27 16:29:54 2005 +0000"
      },
      "message": "2005-04-27 Andrew J. Schorr \u003cajschorr@alumni.princeton.edu\u003e\n\n\t* workqueue.c (show_work_queues): Remove unused gettimeofday call.\n"
    },
    {
      "commit": "843696841b55343e45d6cfdad19035882a67b99f",
      "tree": "62e6224fae2ea014023117b21b0980605b98472a",
      "parents": [
        "07334da01ca0a7b77cb11add3102b57077eb03eb"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Apr 27 12:39:27 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Wed Apr 27 12:39:27 2005 +0000"
      },
      "message": "2005-04-27 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* workqueue.h: (struct work_queue_item) change retry_count to ran,\n\t  its a count of number item has been run.\n\t* workqueue.c: (show_work_queues) Fix formating of slightly\n\t  bugfix: fix SIGFPE if wq-\u003eruns is 0.\n\t  (work_queue_run) retry logic was slightly wrong.\n\t  cycles.best is 0 initialy, granularity is 1, so update best\n\t  if cycles \u003e\u003d granularity, not just \u003e.\n"
    },
    {
      "commit": "354d119a6569b2c6335ae9309e4606e5cccedb6a",
      "tree": "e29bb213c52bb46b3454f845fa5892df306b82e2",
      "parents": [
        "b64d92a8a88e69f711976a3c12c17667ecaba4ee"
      ],
      "author": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Apr 25 16:26:42 2005 +0000"
      },
      "committer": {
        "name": "paul",
        "email": "paul",
        "time": "Mon Apr 25 16:26:42 2005 +0000"
      },
      "message": "2005-04-25 Paul Jakma \u003cpaul.jakma@sun.com\u003e\n\n\t* workqueue.{c,h}: Helper API for setting up and running queues via\n\t  background threads.\n\t* command.c: install the \u0027show workqueues\u0027 command\n\t* memtypes.c: Add work queue mtypes, and a rib-queue type for\n\t  a zebra rib work queue.\n\t* memtypes.h: Updated to match memtypes.c\n\t* Makefile.am: Add new workqueue files to build.\n"
    }
  ]
}
