)]}'
{
  "log": [
    {
      "commit": "f6a21bfac5abf7c6fc121ca1caa78528690a25dd",
      "tree": "3fe32d243b3fede11b25398e85a10aff1a5599c3",
      "parents": [
        "42eb0b255507ca4d3b4e94b7756c15ab742261c0"
      ],
      "author": {
        "name": "Mingwei Shi",
        "email": "mingwei.shi@intel.com",
        "time": "Thu Nov 03 14:53:45 2016 +0000"
      },
      "committer": {
        "name": "Mingwei Shi",
        "email": "mingwei.shi@intel.com",
        "time": "Mon Nov 07 03:32:57 2016 +0000"
      },
      "message": "Eliminate deadlock in forked child due to delayed resetting mutex lock\n\nFor some program implementation, the pattern like below, calling \npthread_atfork to register atfork interfaces.\n\n    pthread_atfork(\u0026atfork_prepare, \u0026atfork_parent, \u0026atfork_child);\n\nWhen the program is expected to reopen the shared library\u0027s handle \ninherited from parent in child process. Maybe, dlclose is called in \natfork_child to release the shared library handle before reopen it. \nThen, dlclose will indrectly call _cxa_finalize and finaly call \n__unregister_atfork when dso is not NULL.\n\n    atfork_child() -\u003e dlclose() -\u003e __on_dlclose() \n    \t-\u003e __cxa_finalize() -\u003e __unregister_atfork(dso)\n\nIn __unregister_atfork, firstly, it try to hold the g_atfork_list_mutex \nlock to operate the g_atfork_list. Due to the registered atfork_child is\nexecuted before resetting g_atfork_list_mutex lock in child, the child \nprocess will be blocked here because of deadlock.\n\nTest: bionic-unit-tests32 --gtest_filter\u003dpthread.pthread_atfork_child_with_dlclose \nwithout the fixing, the test will be timeout.\n\nChange-Id: I35d3001682c836e0955d6d681bc5f9297fad0c7b\nSigned-off-by: Mingwei Shi \u003cmingwei.shi@intel.com\u003e\nSigned-off-by: Qiming Shi \u003cqiming.shi@intel.com\u003e\nSigned-off-by: Chao Xie \u003cchao.xie@intel.com\u003e\n"
    },
    {
      "commit": "33697a0c43c48e15c3bcf018138b9b837d0099cd",
      "tree": "5abb2ab07c7f1322defd9fd6313cd11e12978579",
      "parents": [
        "94bb0fab931102f1fcf393aa507a6b77b741844f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 26 13:04:57 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 26 13:13:52 2016 -0800"
      },
      "message": "Factor out the waiting for children in bionic tests.\n\nChange-Id: I4a1e51b6920b33dc892d447f5bd6d10f1cb2704a\n"
    },
    {
      "commit": "a60fd09e2692e17c8bfa210d3cb64b490aea4c9d",
      "tree": "79087b73826a073d3fa6f58de433cb0b444d6e85",
      "parents": [
        "8264afb37778bea2a3c6e9aa7144f4877401c3f8"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Tue May 05 16:29:28 2015 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed May 06 16:47:54 2015 -0700"
      },
      "message": "Move pthread_atfork_dlclose test out of static lib\n\nBug: http://b/20858755\nChange-Id: I0d84e8b43dc33902d75af18db6b7c8e0b619d718\n(cherry picked from commit 5624a6a1e52ff959b0f88765d38f190700422773)\n"
    }
  ]
}
