)]}'
{
  "commit": "cc389fc6b105572a0ed214e0e0795fb63b92f784",
  "tree": "cec0b7507929eb51b11d3359be45eb3aad5179e3",
  "parents": [
    "879b351bfe1ffe7a7fe8b7c98986a208be706598"
  ],
  "author": {
    "name": "Carl-Daniel Hailfinger",
    "email": "c-d.hailfinger.devel.2006@gmx.net",
    "time": "Sun Feb 14 01:20:28 2010 +0000"
  },
  "committer": {
    "name": "Carl-Daniel Hailfinger",
    "email": "c-d.hailfinger.devel.2006@gmx.net",
    "time": "Sun Feb 14 01:20:28 2010 +0000"
  },
  "message": "Allow the registration of functions to be called at programmer shutdown\n\nSome programmers want to run certain functions during programmer\nshutdown, but the function choice depends on the code path taken\nduring programmer init. Rather than rebuilding the whole init logic in\nthe shutdown function, it is now possible to register functions for\nexecution on programmer shutdown. The behaviour is similar to atexit(),\nbut the registered functions will be run on programmer shutdown instead\nof on exit and the functions will be called with a void * argument\nthat is specified on registration. Registered functions must have\nthe prototype void function(void *); and will be executed in reverse\nregistration order directly before calling the programmer-specific\nshutdown() function. It is recommended to have shutdown() only disable\nprogrammer/hardware access and leave all code path sensitive shutdown to\nfunctions registered with register_shutdown().\n\nThe most prominent use case is resetting the EC after flashing on\nlaptops.\n\nNote: There are quite a few code paths in flashrom which proceed to\nterminate flashrom without any programmer shutdown. Those code paths\nwill not get the benefit of register_shutdown() and they should be\nchanged wherever possible.\n\nCorresponding to flashrom svn r904.\n\nSigned-off-by: Carl-Daniel Hailfinger \u003cc-d.hailfinger.devel.2006@gmx.net\u003e\nAcked-by: Michael Karcher \u003cflashrom@mkarcher.dialup.fu-berlin.de\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "9238c2a1b3894b2d4b04a50bb7c4b7d9f596324f",
      "old_mode": 33188,
      "old_path": "flash.h",
      "new_id": "1474a388efb123826673797cbe08cb3ec6a81294",
      "new_mode": 33188,
      "new_path": "flash.h"
    },
    {
      "type": "modify",
      "old_id": "37106060975aacf49baf2bf734bcbb4035c3aefd",
      "old_mode": 33188,
      "old_path": "flashrom.c",
      "new_id": "b8de3c10789e92aadc18add728cdbc0e039683e3",
      "new_mode": 33188,
      "new_path": "flashrom.c"
    }
  ]
}
