)]}'
{
  "commit": "fd4d0d3eb9b5c7fe2fa1df97d9c0763900b2be52",
  "tree": "25c774814eb3b6e595ea9c267fcb93fee03bf3eb",
  "parents": [
    "bc9a87c33a3f1553934872387a0bb3178b5140e8"
  ],
  "author": {
    "name": "Josh Gao",
    "email": "jmgao@google.com",
    "time": "Wed Apr 26 19:09:47 2017 -0700"
  },
  "committer": {
    "name": "Josh Gao",
    "email": "jmgao@google.com",
    "time": "Fri May 12 12:37:40 2017 -0700"
  },
  "message": "sigchain: always call InitializeSignalChain on startup.\n\nProcesses that link against libsigchain because they might want to\ndynamically load libart.so (e.g. surfaceflinger) might never explicitly\ncall InitializeSignalChain. In this scenario, the lazy initialization\nthat occurs when sigprocmask is called can happen at unexpected times,\nsuch as from pthread_exit, leading to deadlocks or crashes.\n\nAdd __attribute__((constructor)) to InitializeSignalChain to have it be\nautomatically called upon process start. Keep the existing calls to it\nin the wrapper functions in order to sidestep problems around static\ninitialization order.\n\nBug: https://issuetracker.google.com/37119593\nTest: run-test 004-SignalTest\nTest: m test-art-host\nTest: m test-art-target\nChange-Id: I7906c1f625ccca0350ea9310140a3f43a657be4c\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "0bc0869044bd1442835c0d8a4315303af56e9e84",
      "old_mode": 33188,
      "old_path": "runtime/runtime.cc",
      "new_id": "b16937361241d0f20c968c6d888b1a86d7b08b93",
      "new_mode": 33188,
      "new_path": "runtime/runtime.cc"
    },
    {
      "type": "modify",
      "old_id": "f4799d2dcee1781e6358ba3efeb2a6c6f6de3685",
      "old_mode": 33188,
      "old_path": "sigchainlib/sigchain.cc",
      "new_id": "13c03e82611b7150bb8da280bcd2fb7341b03f04",
      "new_mode": 33188,
      "new_path": "sigchainlib/sigchain.cc"
    },
    {
      "type": "modify",
      "old_id": "960d2211772875c79ac72764487422db5b2e816d",
      "old_mode": 33188,
      "old_path": "sigchainlib/sigchain.h",
      "new_id": "0bed117963de6adfaab408d78681efdf6d9866d0",
      "new_mode": 33188,
      "new_path": "sigchainlib/sigchain.h"
    },
    {
      "type": "modify",
      "old_id": "d6a5e12827a71a5a0fc7d9083eb0c4eb85657124",
      "old_mode": 33188,
      "old_path": "sigchainlib/sigchain_dummy.cc",
      "new_id": "2d7985aad1ed990b4df7a7393d40149021020d82",
      "new_mode": 33188,
      "new_path": "sigchainlib/sigchain_dummy.cc"
    },
    {
      "type": "modify",
      "old_id": "f360efafcfb60c72d3514226a2b748b3635d2e1a",
      "old_mode": 33188,
      "old_path": "sigchainlib/version-script32.txt",
      "new_id": "2340785c425ffc75a9f1eef290aae7dbf8838211",
      "new_mode": 33188,
      "new_path": "sigchainlib/version-script32.txt"
    },
    {
      "type": "modify",
      "old_id": "319d1c645aa2041f0166ce129e2bbd1999e210d1",
      "old_mode": 33188,
      "old_path": "sigchainlib/version-script64.txt",
      "new_id": "acf36309ea5434f505d84456304bc6189394c519",
      "new_mode": 33188,
      "new_path": "sigchainlib/version-script64.txt"
    }
  ]
}
