)]}'
{
  "log": [
    {
      "commit": "5450f86b31287173278513eb8b4c8e73b9fdd3ae",
      "tree": "adfd4a7a9cd2fb1d5ef7dbf724b12bbd6f0baeb5",
      "parents": [
        "cdf19c84e8c10f5afa079790e5a2b0a55a3599e9"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Mar 07 23:05:08 2017 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Mar 07 23:24:50 2017 -0800"
      },
      "message": "Fix leak of bionic TLS when threads are detached.\n\n__pthread_internal_free doesn\u0027t happen on threads that are detached,\ncausing the bionic TLS allocation (and guard pages) to be leaked.\n\nFix the leak, and name the allocations to make things apparent if this\never happens again.\n\nBug: http://b/36045112\nTest: manually ran a program that detached empty threads\nChange-Id: Id1c7852b7384474244f7bf5a0f7da54ff962e0a1\n"
    },
    {
      "commit": "7484c21c4c352a2200d94939fabc10d1bd3f0723",
      "tree": "fe089ec40970a76f11107534632b1fc5789660ed",
      "parents": [
        "b0e8c565a622b5519e03d4416b0b5b1a5f20d7f5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 02 02:41:38 2017 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 02 02:41:38 2017 +0000"
      },
      "message": "Revert \"Remove the global thread list.\"\n\nThis reverts commit b0e8c565a622b5519e03d4416b0b5b1a5f20d7f5.\n\nBreaks swiftshader (http:/b/34883464).\n\nChange-Id: I7b21193ba8a78f07d7ac65e41d0fe8516940a83b\n"
    },
    {
      "commit": "b0e8c565a622b5519e03d4416b0b5b1a5f20d7f5",
      "tree": "8362f2754276b72e79a652885be7379127ca6e07",
      "parents": [
        "fb07c36bc061db4ca5d8348ff6bc1e60b6c53191"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 04 14:12:54 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Jan 07 14:16:46 2017 -0800"
      },
      "message": "Remove the global thread list.\n\nAnother release, another attempt to fix this bug.\n\nThis change affects pthread_detach, pthread_getcpuclockid,\npthread_getschedparam/pthread_setschedparam, pthread_join, and pthread_kill:\ninstead of returning ESRCH when passed an invalid pthread_t, they\u0027ll now SEGV.\n\nNote that this doesn\u0027t change behavior as much as you might think: the old\nlookup only held the global thread list lock for the duration of the lookup,\nso there was still a race between that and the dereference in the caller,\ngiven that callers actually need the tid to pass to some syscall or other,\nand sometimes update fields in the pthread_internal_t struct too.\n\nWe can\u0027t check thread-\u003etid against 0 to see whether a pthread_t is still\nvalid because a dead thread gets its thread struct unmapped along with its\nstack, so the dereference isn\u0027t safe.\n\nTaking the affected functions one by one:\n\n* pthread_getcpuclockid and pthread_getschedparam/pthread_setschedparam\n  should be fine. Unsafe calls to those seem highly unlikely.\n\n* Unsafe pthread_detach callers probably want to switch to\n  pthread_attr_setdetachstate instead, or using pthread_detach(pthread_self())\n  from the new thread\u0027s start routine rather than doing the detach in the\n  parent.\n\n* pthread_join calls should be safe anyway, because a joinable thread won\u0027t\n  actually exit and unmap until it\u0027s joined. If you\u0027re joining an\n  unjoinable thread, the fix is to stop marking it detached. If you\u0027re\n  joining an already-joined thread, you need to rethink your design.\n\n* Unsafe pthread_kill calls aren\u0027t portably fixable. (And are obviously\n  inherently non-portable as-is.) The best alternative on Android is to\n  use pthread_gettid_np at some point that you know the thread to be alive,\n  and then call kill/tgkill directly. That\u0027s still not completely safe\n  because if you\u0027re too late, the tid may have been reused, but then your\n  code is inherently unsafe anyway.\n\nIf we find too much code is still broken, we can come back and disable\nthe global thread list lookups for anything targeting \u003e\u003d O and then have\nanother go at really removing this in P...\n\nBug: http://b/19636317\nTest: N6P boots, bionic tests pass\nChange-Id: Ia92641212f509344b99ee2a9bfab5383147fcba6\n"
    },
    {
      "commit": "f86c4494ff9613dcdf3dd7713d1e2c5d989d8eba",
      "tree": "0fcc85b0cd5b41d8c797c11ee455b490b9a4e9e0",
      "parents": [
        "a8e75ba37deff962b0ddbc2fb81b96c3515ae7e5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 25 22:05:28 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 25 22:05:28 2016 -0800"
      },
      "message": "If you\u0027re going to use memset...\n\n...you\u0027d better #include \u003cstring.h\u003e.\n\nChange-Id: I83e0877f4151fc764588e2d876e66d7712d41f61\n"
    },
    {
      "commit": "2c6c95348ca9df1727fd7402b3704e0e87cb347e",
      "tree": "369cbf183fdd9ca24f8e87030796f52faab10c62",
      "parents": [
        "d07d77e399ee26291125bedbe46d03e037e705f2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 25 21:51:50 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 25 21:51:50 2016 -0800"
      },
      "message": "GCC doesn\u0027t like {}, and clang doesn\u0027t like {0}...\n\n...so memset it is, then.\n\nI\u0027ll be glad when GCC is dead and we can use \"\u003d {}\" like it\u0027s the 21st century.\n\nChange-Id: I28d820d3926ac9bf44bf7c1e89e184726c840391\n"
    },
    {
      "commit": "6bd5cf60fa1ddb9474f8cc7b3b4d25179f5a5693",
      "tree": "9786a0524bf020e1f751b7ab55c91c6a2d46dfa4",
      "parents": [
        "e0959b4b164a26eb9931ed6925c71d7870c063fe"
      ],
      "author": {
        "name": "Anton Kirilov",
        "email": "anton.kirilov@linaro.org",
        "time": "Fri Feb 19 18:19:08 2016 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 25 20:49:15 2016 -0800"
      },
      "message": "Fix a structure initialisation in pthread_exit().\n\nThe purpose of this change is to silence Valgrind\u0027s warning about a\nsyscall parameter pointing to uninitialised bytes.\n\nChange-Id: I2737235f9ac288dbc8ec4be0c6f1cef181c9b7d7\n"
    },
    {
      "commit": "ef115003012f61cf5539fdfeb201b98e4a92f610",
      "tree": "d546925be11de056c9c2611fb75d91273cd10303",
      "parents": [
        "8225ad63fac7c5cc298884c101a344959b87dc39"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Mar 30 20:03:57 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Mar 30 20:51:39 2015 -0700"
      },
      "message": "Revert \"Revert \"add guard pages to the internal signal stacks\"\"\n\nThis reverts commit a3125fd1396a09a7fc4872dc4653f342150a3deb.\nAnd Fix the prctl() problem that cause system crash.\n\nChange-Id: Icc8d12d848cfba881a7984ca2827fd81be41f9fd\n"
    },
    {
      "commit": "a3125fd1396a09a7fc4872dc4653f342150a3deb",
      "tree": "5042f453214b2d176c601710c87350c30c7f3944",
      "parents": [
        "595752f623ae88f7e4193a6e531a0805f1c6c4dc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 31 02:42:39 2015 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 31 02:42:39 2015 +0000"
      },
      "message": "Revert \"add guard pages to the internal signal stacks\"\n\nThis reverts commit 595752f623ae88f7e4193a6e531a0805f1c6c4dc.\n\nChange-Id: Iefa66e9049ca0424e53cd5fc320d161b93556dcb\n"
    },
    {
      "commit": "595752f623ae88f7e4193a6e531a0805f1c6c4dc",
      "tree": "2a8d25e25b042f04146725c7a287619e2892940c",
      "parents": [
        "203082b8217cd853eee510ad371b382701960610"
      ],
      "author": {
        "name": "Daniel Micay",
        "email": "danielmicay@gmail.com",
        "time": "Sun Mar 29 00:03:55 2015 -0400"
      },
      "committer": {
        "name": "Daniel Micay",
        "email": "danielmicay@gmail.com",
        "time": "Mon Mar 30 17:13:20 2015 -0400"
      },
      "message": "add guard pages to the internal signal stacks\n\nSignal handlers tend to be lean, but can still overflow the (tiny)\nstack.\n\nChange-Id: Ia21c6453d92a9f8d1536ad01ff26a1a84c05f8fb\n"
    },
    {
      "commit": "df79c330d895af31f39ee301dee62731fa586168",
      "tree": "7129c6e46b2c150027605af4c6f08c1e6de24815",
      "parents": [
        "0c3b632bd6570064bab1055d2b8a51cfb85e60bb"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Mar 25 17:38:10 2015 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Mar 25 18:07:59 2015 -0700"
      },
      "message": "Initial implementation of __cxa_thread_atexit_impl\n\n  This is initial implementations; does not yet handle\n  dlclose - undefined behavior, needs linker support to\n  handle it right.\n\nBug: 19800080\nBug: 16696563\nChange-Id: I7a3e21ed7f7ec01e62ea1b7cb2ab253590ea0686\n"
    },
    {
      "commit": "673b15e4ee2c6d99b150aedddc0f389e29f98e1b",
      "tree": "edc101b54c689960bdf1262e6378b21082d3e277",
      "parents": [
        "4149dc944bbe3c5f1c14fc998106975e68bdd6bf"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Mar 19 14:19:19 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Mar 23 19:03:49 2015 -0700"
      },
      "message": "Let g_thread_list_lock only protect g_thread_list.\n\nAs glibc/netbsd don\u0027t protect access to thread struct members by a global\nlock, we don\u0027t want to do it either. This change reduces the\nresponsibility of g_thread_list_lock to only protect g_thread_list.\n\nBug: 19636317\nChange-Id: I897890710653dac165d8fa4452c7ecf74abdbf2b\n"
    },
    {
      "commit": "58cf31b50699ed9f523de38c8e943f3bbd1ced9e",
      "tree": "258ba808074bd047a94df452a4e465db66136797",
      "parents": [
        "e86a86f9f24df7028d2596c69ff008cf88e039e4"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Mar 06 17:23:53 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Mar 12 21:39:49 2015 -0700"
      },
      "message": "Make pthread join_state not protected by g_thread_list_lock.\n\n1. Move the representation of thread join_state from pthread.attr.flag\n   to pthread.join_state. This clarifies thread state change.\n2. Use atomic operations for pthread.join_state. So we don\u0027t need to\n   protect it by g_thread_list_lock. g_thread_list_lock will be reduced\n   to only protect g_thread_list or even removed in further changes.\n\nBug: 19636317\nChange-Id: I31fb143a7c69508c7287307dd3b0776993ec0f43\n"
    },
    {
      "commit": "19e246dda6772ffc532b1762cd7870d6c3b01c12",
      "tree": "93ab36fe44bc75b7366ad6d362ba25bc4ba4d994",
      "parents": [
        "deab11acd7000573ad9c034e5bf9475aadbc5cbe"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Dec 18 14:22:09 2014 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Jan 15 10:45:25 2015 -0800"
      },
      "message": "Fix possible leak in pthread_detach.\n\nIf pthread_detach() is called while the thread is in pthread_exit(),\nit takes the risk that no one can free the pthread_internal_t.\nSo I add PTHREAD_ATTR_FLAG_ZOMBIE to detect this, maybe very rare, but\nboth glibc and netbsd libpthread have similar function.\n\nChange-Id: Iaa15f651903b8ca07aaa7bd4de46ff14a2f93835\n"
    },
    {
      "commit": "ba8dfc2669d658dc340eb8f9c9b40ca074f05047",
      "tree": "d8e34d3dd322641c80c2605457378afd60d0bdfb",
      "parents": [
        "597800f1d71590fc9ad51ce5227280586b2ceda5"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Jan 06 09:31:00 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Jan 06 17:11:23 2015 -0800"
      },
      "message": "Remove PTHREAD_ATTR_FLAG_USER_ALLOCATED_STACK.\n\nPatch for https://android-review.googlesource.com/#/c/120844/.\n\nChange-Id: Idca5ccd7b28e8f07f1d2d1b6e3bba6781b62f0e0\n"
    },
    {
      "commit": "6a7aaf46759db32c6ed0eb953a4a230dc96af0d9",
      "tree": "89b9cbd40571d38d60c19730224c90efd0fb4ebf",
      "parents": [
        "a2177c6ccb65104659543c895b753458abfadcab"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Dec 22 19:17:33 2014 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Jan 02 14:33:48 2015 -0800"
      },
      "message": "Reserve enough user request stack space in pthread_create.\n\nBug: 18830897\nChange-Id: I1ba4aaeaf66a7ff99c5d82ad45469011171b0a3b\n"
    },
    {
      "commit": "8cf1b305670123aed7638d984ca39bfd22388440",
      "tree": "f8fc12a882822ca1ba41b68d84414e252faade9c",
      "parents": [
        "c631bb215e29981222f19c092ded49c7c1f15845"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Dec 03 21:36:24 2014 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Dec 19 16:05:29 2014 -0800"
      },
      "message": "Use mmap to create the pthread_internal_t\n\nAdd name to mmaped regions.\nAdd pthread benchmark code.\nAllocate pthread_internal_t on regular stack.\n\nBug: 16847284\nChange-Id: Id60835163bb0d68092241f1a118015b5a8f85069\n"
    },
    {
      "commit": "8574a0670bf698b8d2f817098f9d825c4be03a68",
      "tree": "f01c1cd0cab5ff4bad74f9be90cd1dc0cc822513",
      "parents": [
        "46d0b81a9465bf74fe44a881365c332dc6173f2f"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Dec 01 22:37:56 2014 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Dec 02 10:39:25 2014 -0800"
      },
      "message": "Use mmap to create the pthread_internal_t.\n\nBug: 16847284\nChange-Id: I488fa236f57aa3acb29b4ffbbab2fab51b0653be\n"
    },
    {
      "commit": "5b8ceff5f87889e781c13305767e140afd28eb76",
      "tree": "ad95ccbfbc12b6a75ef56e6646cea4aee94b675c",
      "parents": [
        "cc5f6543e3f91385b9a912438965b7e8265df54a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 26 11:53:44 2014 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Nov 26 11:56:54 2014 +0000"
      },
      "message": "Revert \"Use mmap to create the pthread_internal_t.\"\n\nUnfortunately, this change provokes random crashes for ART, and\nI have seen libc crashes on the device that might be related to it.\n\nReverting it fixes the ART crashes. there is unfortunately no\nstack trace for the crashes, but just a \"Segmentation fault\" message.\n\n\nThis reverts commit cc5f6543e3f91385b9a912438965b7e8265df54a.\n\nChange-Id: I68dca8e1e9b9edcce7eb84596e8db619e40e8052"
    },
    {
      "commit": "cc5f6543e3f91385b9a912438965b7e8265df54a",
      "tree": "5176225b4d6b6f62ab590563022901042de44d8e",
      "parents": [
        "eb3a5e026e65ea80b17580a71f4451f5cf5d6612"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Nov 25 14:18:12 2014 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Nov 25 15:25:06 2014 -0800"
      },
      "message": "Use mmap to create the pthread_internal_t.\n\nBug: 16847284\nChange-Id: Ic8c85f95afac1d8422ecb69674c688d1fecb6a44\n"
    },
    {
      "commit": "e380960813bbb6e05d820eb75885556a1c4bf6ac",
      "tree": "9eafb0466f8e3cdc3c24125d295e488312ac2099",
      "parents": [
        "f3868fa735ad67ec853f3db36936ca184bd5f79a"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Aug 06 14:15:01 2014 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Aug 06 17:57:04 2014 -0700"
      },
      "message": "Do a second key cleanup in pthread_exit.\n\nDuring pthread_exit, the keys are cleaned. Unfortunately, a call to\nfree occurs after the cleanup and the memory for some of the keys\nis recreated when using jemalloc. The solution is to do the key\ncleanup twice.\n\nAlso, modify the pthread_detach__leak test to be less flaky\nwhen run on a jemalloc system.\n\nBug: 16513133\n\n(cherry picked from commit 18d93f2793fad393b6aa6eae6afe1054958339d5)\n\nChange-Id: Idb32e7f9b09e2c088d256ed9eb881df80c81ff8e\n"
    },
    {
      "commit": "40a521744825b6060960c296d5fb3da4c6593d94",
      "tree": "b9736886f5ca89daf4bf6cca05e090315a006dcd",
      "parents": [
        "4ad5066e1de326e5db46df18eeade9a88bc11bec"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 30 14:48:10 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 30 14:49:40 2014 -0700"
      },
      "message": "Only wipe TLS for user-supplied stacks.\n\nBug: 16667988\nChange-Id: Id180ab2bc6713e1612386120a306db5bbf1d6046\n"
    },
    {
      "commit": "6203e7b853a587fbd70cea2e58b63ae38a71a13e",
      "tree": "e13aad8c180100b87e7a24c2ae5292c81599d223",
      "parents": [
        "3a3b27e04df395b789b92af3d0ed05d2a0f3bf04"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 30 14:49:00 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 30 15:56:25 2014 -0700"
      },
      "message": "Add some missing __noreturn attributes.\n\nThis is more honest, and lets us remove a hack.\n\nChange-Id: I309f064743ded5248573ccafc379f78d417db08d\n"
    },
    {
      "commit": "1728b2396591853345507a063ed6075dfd251706",
      "tree": "7083cd234073afa5179b94b3d978550c890af90c",
      "parents": [
        "bac795586bbc5dcbe886d8d781710f60c4c19d9b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 14 10:02:03 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 14 10:02:03 2014 -0700"
      },
      "message": "Switch to g_ for globals.\n\nThat\u0027s what the Google style guide recommends, and we\u0027re starting\nto get a mix.\n\nChange-Id: Ib0c53a890bb5deed5c679e887541a715faea91fc\n"
    },
    {
      "commit": "2aace21a19b6be8f6a427fc664d4175f0bf832c9",
      "tree": "2f5405d71e85ba2eee7b6d33d327a8866f8951cc",
      "parents": [
        "6d929061c36e7929c61c8e6331315b86fe86976f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Dec 21 15:30:49 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Dec 21 15:30:49 2013 -0800"
      },
      "message": "Remove the bogus exit status from _exit_with_stack_teardown.\n\nIt should always be 0, and there\u0027s no reason to pass a constant in as\nan argument.\n\nChange-Id: I92ac59b718a18e298bd7c52821af447f9181ca2a\n"
    },
    {
      "commit": "960ee37f2aaf52bbec2f6265fd6e30fb2b41fef3",
      "tree": "d07da920636204ea700c7945db95e1b086730d4f",
      "parents": [
        "2e3591557f4a382e441ee2d60614d616b5acb434"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 11 12:41:54 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 11 12:41:54 2013 -0800"
      },
      "message": "Clarify a comment.\n\nChange-Id: Iad2e33fb059170f808023ce3d17e9b8c13191f42\n"
    },
    {
      "commit": "101fb7d963ed362c4e351d95e55cbd70dc59eac3",
      "tree": "07785e035365c55c1720f26db8086fcd5cb778ad",
      "parents": [
        "6afe8ab7533937c7444756ae72dda547b9849fe2"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Dec 06 18:54:48 2013 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Dec 06 23:00:44 2013 -0800"
      },
      "message": "Do not clear tids on detached threads.\n\nMake sure that the kernel isn\u0027t going to try and clear the tid of\nfreed memory.\n\nBug: 11963327\nChange-Id: I95d02340bfbe92f56036d2cc58dbf0e3079eb7c3\n"
    },
    {
      "commit": "877ec6d90418ff1d6597147d355a2229fdffae7e",
      "tree": "e475221a7fbff1564ad37548e920333c49cc5873",
      "parents": [
        "f246c589d66e5dc0e3cddc3c37261fb0e3fc67e9"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 15 17:40:18 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 18 19:48:11 2013 -0800"
      },
      "message": "Fix pthread_join.\n\nLet the kernel keep pthread_internal_t::tid updated, including\nacross forks and for the main thread. This then lets us fix\npthread_join to only return after the thread has really exited.\n\nAlso fix the thread attributes of the main thread so we don\u0027t\nunmap the main thread\u0027s stack (which is really owned by the\ndynamic linker and contains things like environment variables),\nwhich fixes crashes when joining with an exited main thread\nand also fixes problems reported publicly with accessing environment\nvariables after the main thread exits (for which I\u0027ve added a new\nunit test).\n\nIn passing I also fixed a bug where if the clone(2) inside\npthread_create(3) fails, we\u0027d unmap the child\u0027s stack and TLS (which\ncontains the mutex) and then try to unlock the mutex. Boom! It wasn\u0027t\nuntil after I\u0027d uploaded the fix for this that I came across a new\npublic bug reporting this exact failure.\n\nBug: 8206355\nBug: 11693195\nBug: https://code.google.com/p/android/issues/detail?id\u003d57421\nBug: https://code.google.com/p/android/issues/detail?id\u003d62392\nChange-Id: I2af9cf6e8ae510a67256ad93cad891794ed0580b\n"
    },
    {
      "commit": "61fb3fc770566c7bafe7af8fb93590bcad387fbb",
      "tree": "6ee5199c60b3105c89e8dcf01a6d065007533013",
      "parents": [
        "266eb4a44c4cdd9502980511ff2846fde5c66454"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 07 12:28:46 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 07 12:29:07 2013 -0800"
      },
      "message": "Prepare to switch to the uapi \u003clinux/signal.h\u003e.\n\n\u003ctime.h\u003e didn\u0027t need to copy the cruft from \u003csignal.h\u003e, and\n\u003csignal.h\u003e only needs the uid_t hack when it\u0027s not using\nuapi headers.\n\npthread_exit.cpp should include what it uses.\n\nChange-Id: I836c36abe0f0a781d41fc425b249d1c7686bb124\n"
    },
    {
      "commit": "c3f114037dbf028896310609fd28cf2b3da99c4d",
      "tree": "e463aeb3604177cd93cea8a58936a8dce4b34ee5",
      "parents": [
        "d0d0b52da375bfa85947a4257198791f615f18a8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 30 14:40:09 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 31 12:31:16 2013 -0700"
      },
      "message": "\u003cpthread.h\u003e fixes and pthread cleanup.\n\n\u003cpthread.h\u003e was missing nonnull attributes, noreturn on pthread_exit,\nand had incorrect cv qualifiers for several standard functions.\n\nI\u0027ve also marked the non-standard stuff (where I count glibc rather\nthan POSIX as \"standard\") so we can revisit this cruft for LP64 and\ntry to ensure we\u0027re compatible with glibc.\n\nI\u0027ve also broken out the pthread_cond* functions into a new file.\n\nI\u0027ve made the remaining pthread files (plus ptrace) part of the bionic code\nand fixed all the warnings.\n\nI\u0027ve added a few more smoke tests for chunks of untested pthread functionality.\n\nWe no longer need the libc_static_common_src_files hack for any of the\npthread implementation because we long since stripped out the rest of\nthe armv5 support, and this hack was just to ensure that __get_tls in libc.a\nwent via the kernel if necessary.\n\nThis patch also finishes the job of breaking up the pthread.c monolith, and\nadds a handful of new tests.\n\nChange-Id: Idc0ae7f5d8aa65989598acd4c01a874fe21582c7\n"
    }
  ]
}
