)]}'
{
  "log": [
    {
      "commit": "5e62b34c0d6fa545b487b9b64fb4a04a0589bc13",
      "tree": "e08ee44067b3b636ace11b21ec8d63a08d4d2a19",
      "parents": [
        "c89a3971e94c30611c885e4c440eae2fd9937948"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 25 11:00:00 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 25 11:00:00 2018 -0700"
      },
      "message": "Clean up bionic_macros.h a bit.\n\nUse \u003candroid-base/macros.h\u003e instead where possible, and move the bionic\nmacros out of the way of the libbase ones. Yes, there are folks who manage\nto end up with both included at once (thanks OpenGL!), and cleaning that\nup doesn\u0027t seem nearly as practical as just making this change.\n\nBug: N/A\nTest: builds\nChange-Id: I23fc544f39d5addf81dc61471771a5438778895b\n"
    },
    {
      "commit": "7982914faefdcc6b0fbb98d63bb9fde48d4efd18",
      "tree": "fe2b1b82412cc7bce48b49398221b37025ef5f01",
      "parents": [
        "5e805526422d90c4054c9fb0f7b1b915dc49f3c8"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Sep 18 14:39:33 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Sep 18 14:40:35 2017 -0700"
      },
      "message": "Drop thread list lock before abort.\n\nBug: 65656273\n\nTest: Ran the app and verified it crashes instead of deadlocks.\nChange-Id: I7dbe653d50a635a23993c99c5f73ca094ee80b28\n"
    },
    {
      "commit": "7a3681e5b6c39bc2b3b62031ca5941dbf7bc4e63",
      "tree": "78c25e2a38b7efed8db770a623a5cbfb7eaab11d",
      "parents": [
        "ca5e0f49ca5df873a20c996755175b5c9c1e2ed9"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Apr 24 17:48:32 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed May 03 08:50:43 2017 -0700"
      },
      "message": "Move libc_log code into libasync_safe.\n\nThis library is used by a number of different libraries in the system.\nMake it easy for platform libraries to use this library and create\nan actual exported include file.\n\nChange the names of the functions to reflect the new name of the library.\n\nRun clang_format on the async_safe_log.cpp file since the formatting is\nall over the place.\n\nBug: 31919199\n\nTest: Compiled for angler/bullhead, and booted.\nTest: Ran bionic unit tests.\nTest: Ran the malloc debug tests.\nChange-Id: I8071bf690c17b0ea3bc8dc5749cdd5b6ad58478a\n"
    },
    {
      "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": "5e2285d3ccdbb64a49ad2e5e521f50c897a3954d",
      "tree": "cd56c251f1710652fad3b84121248a12071b42e0",
      "parents": [
        "c9a840ac76c7cdbe6028ac91cdb8eb6698f0a854"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Feb 22 12:19:05 2017 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Feb 22 16:05:03 2017 -0800"
      },
      "message": "Allocate thread local buffers in __init_tls.\n\nThread local buffers were using pthread_setspecific for storage with\nlazy initialization. pthread_setspecific shares TLS slots between the\nlinker and libc.so, so thread local buffers being initialized in a\ndifferent order between libc.so and the linker meant that bad things\nwould happen (manifesting as snprintf not working because the\nlocale was mangled)\n\nBug: http://b/20464031\nTest: /data/nativetest64/bionic-unit-tests/bionic-unit-tests\n      everything passes\nTest: /data/nativetest/bionic-unit-tests/bionic-unit-tests\n      thread_local tests are failing both before and after (KUSER_HELPERS?)\nTest: /data/nativetest64/bionic-unit-tests-static/bionic-unit-tests-static\n      no additional failures\nChange-Id: I9f445a77c6e86979f3fa49c4a5feecf6ec2b0c3f\n"
    },
    {
      "commit": "6ce686c48bf6ec07a1e25b94bba7e9a3a6df4b49",
      "tree": "cd2b90df1e7b51cc6d993590f0d488e3cdbd2bb2",
      "parents": [
        "40854235256c3f51f9ea866f5f8ef03240c00123"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 21 13:15:20 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 21 14:21:43 2017 -0800"
      },
      "message": "Downgrade the special case of pthread_t(0) to a warning.\n\nSo far this is the only issue we\u0027ve hit in vendor code, and we\u0027ve hit\nit several times already. Rather than try to fix bullhead (the current\nproblem), let\u0027s just admit that the special case of 0 is a lot less\nworrying.\n\nAlso fix the test expectations to correspond to the new abort message.\n\nBug: http://b/35455349 (crashes on 0)\nBug: http://b/35622944 (tests)\nTest: ran tests\nChange-Id: Iec57011fa699a954ebeaec151db2193e36d1ef35\n"
    },
    {
      "commit": "3fed6ff847d0fb7409a2af4b00b6e47e1ad357ff",
      "tree": "75df78857fe749447ac180111aa3f56534711cda",
      "parents": [
        "4509e0ec94b6310d13b9f06a122ec66acb224a10"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 17 10:27:45 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 17 10:27:45 2017 -0800"
      },
      "message": "Include the pthread_t in the \"bad pthread_t\" fatal abort.\n\nAlso reword the message to be stronger.\n\nBug: http://b/35455349\nTest: manual\nChange-Id: I8f34fd42f3b635c95a7b921645a016fb303ce3ad\n"
    },
    {
      "commit": "11859d467c035081f8acafeaf0184b670cd41c48",
      "tree": "36afb3b9c9bbff69d83945e7ab08b7687908f74c",
      "parents": [
        "132768084e24119c337e56fd110b97a23e5593c2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 13 17:59:29 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 13 17:59:29 2017 -0800"
      },
      "message": "Be more strict about using invalid `pthread_t`s.\n\nAnother release, another attempt to remove the global thread list.\n\nBut this time, let\u0027s admit that it\u0027s not going away. We can switch to using\na read/write lock for the global thread list, and to aborting rather than\nquietly returning ESRCH if we\u0027re given an invalid pthread_t.\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, if you\u0027re\ntargeting O or above, they\u0027ll abort with the message \"attempt to use\ninvalid pthread_t\".\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\n(This patch replaces such users with calls to pthread_gettid_np, which\nat least makes the TOCTOU window smaller.)\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\n      pthread_detach(pthread_self()) from the new thread\u0027s start routine\n      rather than doing the detach in the parent.\n\n    * pthread_join calls should be safe anyway, because a joinable thread\n      won\u0027t 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\n      alive, and then call kill/tgkill directly.\n\n      That\u0027s still not completely safe because if you\u0027re too late, the tid\n      may have been reused, but then your code is inherently unsafe anyway.\n\nBug: http://b/19636317\nTest: ran tests\nChange-Id: I0372c4428e8a7f1c3af5c9334f5d9c25f2c73f21\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": "4bc739a54c4ba9063e91bef06ff226dab118792d",
      "tree": "0eed99d568621b6609269e02ff0f5b9eb03d62fd",
      "parents": [
        "a279324094d748b97201412b2457d2f6e26287dd"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Feb 04 16:21:01 2016 -0800"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Feb 04 16:48:47 2016 -0800"
      },
      "message": "Add check for pthread_self() when looking up a thread\n\nCheck if thread_id is in fact pthread_self before\nlocking on g_thread_list_lock in __pthread_internal_find.\n\nThe main reason for doing this is not performance but to allow\nthe linker use raise() which was not working because pthread_kill()\ncouldn\u0027t find pthread_self() thread because the global thread\nlist is initialized in libc.so and the linker\u0027s version of this\nlist is empty.\n\nBug: http://b/25867917\nChange-Id: I18fe620e8cd465b30f0e1ff45fff32958f3c5c00\n"
    },
    {
      "commit": "220b99bdc1c5f51825ac2a87062bc05fe3e0d722",
      "tree": "a152db94f166379d6691f67b09ff142e768e7ebe",
      "parents": [
        "03324780aae9ff28c8acf52debf0ea39120e5ab8"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Mar 26 18:13:07 2015 +0000"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Mar 26 18:13:07 2015 +0000"
      },
      "message": "Revert \"Cause Fatal error when invalid pthread_id is detected.\"\n\nSome code like in https://buganizer.corp.google.com/u/0/issues/19942911 need to change first.\n\nThis reverts commit 03324780aae9ff28c8acf52debf0ea39120e5ab8.\n\nChange-Id: I13ff1e5b3d0672bae9cde234ffba32fbbf33d338\n"
    },
    {
      "commit": "03324780aae9ff28c8acf52debf0ea39120e5ab8",
      "tree": "0b20e663701fc040c406d7f7014680b63b73f5ed",
      "parents": [
        "0c3b632bd6570064bab1055d2b8a51cfb85e60bb"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Mar 24 17:43:14 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Mar 25 15:30:39 2015 -0700"
      },
      "message": "Cause Fatal error when invalid pthread_id is detected.\n\nThis is a patch testing whether we can use abort() instead of\nreturning ESRCH for invalid pthread ids. It is an intermediate\nstep to remove g_thread_list/g_thread_list_lock.\n\nBug: 19636317\nChange-Id: Idd8e4a346c7ce91e1be0c2ebcb78ce51c0d0a31d\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": "2f836d4989845c0c82a1e4f99206fb0ff0d137a2",
      "tree": "7190db5cf1a8d85e40aa664b7ac50aa120ace278",
      "parents": [
        "c0eaa732844a8397d40a7ec82641f709e4b47a61"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Mar 18 14:14:02 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Mar 18 19:35:34 2015 -0700"
      },
      "message": "Make __get_thread inlined.\n\nBug: 19825434\n\nChange-Id: Ifb672a45a5776b83625a25654ed0d6f7fc368ae3\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": "75ef63d6cf83787233d1c45489c4ec03b0a67d16",
      "tree": "af1358c723e21ebfbd48a4dfd2abc3f262cb309d",
      "parents": [
        "f6640348876cd1d4d43cc95cf63306fedb83d8b9"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri Nov 21 00:18:07 2014 -0800"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri Nov 21 10:26:09 2014 -0800"
      },
      "message": "Move some pthread functions to signal.h.\n\nPOSIX specifies that pthread_kill(3) and pthread_sigmask(3) are\nsupposed to live in signal.h rather than pthread.h.\n\nSince signal.h now needs pthread_t and pthread_attr_t, I\u0027ve moved\nthose defintions into include/machine/pthread_types.h to keep the\nnamespace clean. I also sorted some includes. The combination of these\ntwo things seems to have exploded into a cascade of missing includes,\nso this patch also cleans up all those.\n\nChange-Id: Icfa92a39432fe83f542a797e5a113289d7e4ad0c\n"
    },
    {
      "commit": "04303f5a8ab9a992f3671d46b6ee2171582cbd61",
      "tree": "98d3997d33e93eeb91a2c2f331b57f35c180cbb2",
      "parents": [
        "adc01348ee51a4ad678b1c277f85cbbed5c2e728"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 18 16:11:59 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 19 17:37:06 2014 -0700"
      },
      "message": "Add semaphore tests, fix sem_destroy.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d76088\nChange-Id: I4a0561b23e90312384d40a1c804ca64ee98f4066\n"
    },
    {
      "commit": "a4831cb4a3f44b93788488db8ff9ea76613f0355",
      "tree": "eaa225c537d468307739bc48bbc86e241ada58e0",
      "parents": [
        "ea66004c4a051e40c49314d808e7359634f6c641"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 11 16:11:43 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 11 16:22:50 2014 -0700"
      },
      "message": "Add pthread_gettid_np and re-expose __get_thread for LP32.\n\nA lot of third-party code calls the private __get_thread symbol,\noften as part of a backport of bionic\u0027s pthread_rwlock implementation.\nHopefully this will go away for LP64 (since you\u0027re guaranteed the\nreal implementation there), but there are still APIs that take a tid\nand no way to convert between a pthread_t and a tid. pthread_gettid_np\nis a public API for that. To aid the transition, make __get_thread\navailable again for LP32.\n\n(cherry-pick of 27efc48814b8153c55cbcd0af5d9add824816e69.)\n\nBug: 14079438\nChange-Id: I43fabc7f1918250d31d4665ffa4ca352d0dbeac1\n"
    },
    {
      "commit": "d5ed63a6a8290de88802172ce178656fbafe70c6",
      "tree": "97bb7a00c975041f6e297fe7ff53a8b116f405bf",
      "parents": [
        "f97d8713a265f44279819ba6b245dd81aada34da"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 21 18:27:40 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 21 18:30:00 2014 -0700"
      },
      "message": "Hide most of the private futex functions.\n\nAlso hide part of the system properties compatibility code, since\nwe needed to touch that to keep it building.\n\nI\u0027ll remove __futex_syscall4 and futex in a later patch.\n\nBug: 11156955\nChange-Id: Ibbf42414c5bb07fb9f1c4a169922844778e4eeae\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": "0e714a5b41451e84c5ded93a42c9a4b0a9440691",
      "tree": "86e6519cc723fb66a9432193da16b380255c22f7",
      "parents": [
        "8e541b12237f597c186820b9e18b059b620bef54"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 03 16:42:47 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 04 10:27:58 2014 -0800"
      },
      "message": "Implement POSIX pthread_mutex_timedlock.\n\nThis replaces the non-standard pthread_mutex_lock_timeout_np, which we have\nto keep around on LP32 for binary compatibility.\n\nChange-Id: I098dc7cd38369f0c1bec1fac35687fbd27392e00\n"
    },
    {
      "commit": "cef3faec0ea40fdfe58e425fd0be64f00de6a26d",
      "tree": "1f33cbb2de225d0d76d3eb53ef8857b9ecc79bbe",
      "parents": [
        "1b2d214b62ad7bf46f37c79442a69d930aa29027"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 19 16:52:24 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 19 17:22:22 2013 -0800"
      },
      "message": "Clean up pthread_internal_t.\n\nBug: 11755300\nChange-Id: Ib509e8c5ec6b23513aa78b5ac5141d7c34ce2dc8\n"
    },
    {
      "commit": "36d6188f8cd8b948fb797f11d9620d63d0c2215a",
      "tree": "86b3162cac031151b2ae44b4d554fce4f9456147",
      "parents": [
        "318e86ed887e04e593f3db9b84b402d5501ced9b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 19 13:31:58 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 19 14:08:54 2013 -0800"
      },
      "message": "Clean up forking and cloning.\n\nThe kernel now maintains the pthread_internal_t::tid field for us,\nand __clone was only used in one place so let\u0027s inline it so we don\u0027t\nhave to leave such a dangerous function lying around. Also rename\nfiles to match their content and remove some useless #includes.\n\nChange-Id: I24299fb4a940e394de75f864ee36fdabbd9438f9\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"
    },
    {
      "commit": "eb847bc8666842a3cfc9c06e8458ad1abebebaf0",
      "tree": "15e070fb706ba7599d5f402a8f934a7399541a6a",
      "parents": [
        "0c17099a71cb5d1b36b7aab66fd7341b3fc9106d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 09 15:50:50 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 09 16:00:17 2013 -0700"
      },
      "message": "Fix x86_64 build, clean up intermediate libraries.\n\nThe x86_64 build was failing because clone.S had a call to __thread_entry which\nwas being added to a different intermediate .a on the way to making libc.so,\nand the linker couldn\u0027t guarantee statically that such a relocation would be\npossible.\n\n  ld: error: out/target/product/generic_x86_64/obj/STATIC_LIBRARIES/libc_common_intermediates/libc_common.a(clone.o): requires dynamic R_X86_64_PC32 reloc against \u0027__thread_entry\u0027 which may overflow at runtime; recompile with -fPIC\n\nThis patch addresses that by ensuring that the caller and callee end up in the\nsame intermediate .a. While I\u0027m here, I\u0027ve tried to clean up some of the mess\nthat led to this situation too. In particular, this removes libc/private/ from\nthe default include path (except for the DNS code), and splits out the DNS\ncode into its own library (since it\u0027s a weird special case of upstream NetBSD\ncode that\u0027s diverged so heavily it\u0027s unlikely ever to get back in sync).\n\nThere\u0027s more cleanup of the DNS situation possible, but this is definitely a\nstep in the right direction, and it\u0027s more than enough to get x86_64 building\ncleanly.\n\nChange-Id: I00425a7245b7a2573df16cc38798187d0729e7c4\n"
    },
    {
      "commit": "2a0b873065edb304fa2d1c54f8de663ea638b8ab",
      "tree": "4753b74b87e713379965bb051482036e6726afb1",
      "parents": [
        "777a4ee6771e6fe3362ef4f24244a44fcd0aabe4"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 08 18:50:24 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 09 13:39:13 2013 -0700"
      },
      "message": "Fix __errno for LP64 and clean up __get_tls.\n\nIf __get_tls has the right type, a lot of confusing casting can disappear.\n\nIt was probably a mistake that __get_tls was exposed as a function for mips\nand x86 (but not arm), so let\u0027s (a) ensure that the __get_tls function\nalways matches the macro, (b) that we have the function for arm too, and\n(c) that we don\u0027t have the function for any 64-bit architecture.\n\nChange-Id: Ie9cb989b66e2006524ad7733eb6e1a65055463be\n"
    },
    {
      "commit": "9d23e04c43dbb8480bea8be28b8a2f37423bec49",
      "tree": "e403288cf01ce40d6f330da09a317c7ad6dc2cb2",
      "parents": [
        "081318e3550b1a8d8384d98d7c94527681691120"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 15 19:21:51 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 19 12:21:41 2013 -0800"
      },
      "message": "Fix pthreads functions that should return ESRCH.\n\nimgtec pointed out that pthread_kill(3) was broken, but most of the\nother functions that ought to return ESRCH for invalid/exited threads\nwere equally broken.\n\nChange-Id: I96347f6195549aee0c72dc39063e6c5d06d2e01f\n"
    }
  ]
}
