)]}'
{
  "commit": "5836780f436e03be231ff245f04f2f9f2f0ede91",
  "tree": "e9ff7f34263a68d9749f59926cf194acd7d8eea5",
  "parents": [
    "b39eda7ee69a9277c722f8789736e00dc680cda6"
  ],
  "author": {
    "name": "Matt Caswell",
    "email": "matt@openssl.org",
    "time": "Tue Oct 18 14:13:25 2016 +0100"
  },
  "committer": {
    "name": "Matt Caswell",
    "email": "matt@openssl.org",
    "time": "Wed Nov 02 23:32:50 2016 +0000"
  },
  "message": "Ensure that libcrypto and libssl do not unload until the process exits\n\nBecause we use atexit() to cleanup after ourselves, this will cause a\nproblem if we have been dynamically loaded and then unloaded again: the\natexit() handler may no longer be there.\n\nMost modern atexit() implementations can handle this, however there are\nstill difficulties if libssl gets unloaded before libcrypto, because of\nthe atexit() callback that libcrypto makes to libssl.\n\nThe most robust solution seems to be to ensure that libcrypto and libssl\nnever unload. This is done by simply deliberately leaking a dlopen()\nreference to them.\n\nReviewed-by: Tim Hudson \u003ctjh@openssl.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "93ec7bbc6905807ccea7336b0896a89173d08f05",
      "old_mode": 33188,
      "old_path": "crypto/init.c",
      "new_id": "ebc41465d539abe27521f6281dd5c82670a35bff",
      "new_mode": 33188,
      "new_path": "crypto/init.c"
    }
  ]
}
