)]}'
{
  "log": [
    {
      "commit": "ab4cddc32934678d836483a49992f053347a320d",
      "tree": "e9607b74a7f885c79928aad5d6fd33c72f8d13ac",
      "parents": [
        "d5c04c5ebb67e4581d7d861503de111ff84c5b75"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue May 02 16:18:13 2017 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue May 02 16:18:13 2017 -0700"
      },
      "message": "Fix pthread_barrier_smoke test (part 2).\n\nBug:http://b/37652807\nTest: run bionic-unit-tests.\nChange-Id: Iaea553177956c5d08f754210273637f69d888c20\n"
    },
    {
      "commit": "d5c04c5ebb67e4581d7d861503de111ff84c5b75",
      "tree": "7dc98025898decc9a49bcb316d82f6d1dd71ca4e",
      "parents": [
        "ca5e0f49ca5df873a20c996755175b5c9c1e2ed9"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue May 02 12:57:39 2017 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue May 02 12:57:39 2017 -0700"
      },
      "message": "Fix pthread_barrier_smoke test.\n\nBug: http://b/37652807\nTest: run bionic-unit-tests.\nChange-Id: Id7245223bc2a284efed6e710892b58947ef5d555\n"
    },
    {
      "commit": "b8ab61804cec48e4ca585f4508fb1b7c6c5a04c5",
      "tree": "4a1045e4b9e30c52e6c3886de8474c0aeb2c8996",
      "parents": [
        "12021ce9cf1ec1bc47cded3402ac9a3aa7b9b396"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Apr 05 16:20:29 2017 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Apr 05 16:37:07 2017 -0700"
      },
      "message": "Move scopeguard into android::base\n\nTest: boot bullhead, bionic unit tests\nChange-Id: I223249684867655ecb53713b10da41d3014f96ae\n"
    },
    {
      "commit": "61db9ac8da441d426a13ae59fca5256a77a06c6f",
      "tree": "3cda72b13844a3980205d920f75e5a6edc7ab0a1",
      "parents": [
        "2390f83da4c76ec627313fa565ec87236a391e5e"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Mar 15 19:42:05 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Mar 15 19:53:17 2017 -0700"
      },
      "message": "Split up the stack space tests into their own noinline functions.\n\nPrevent the compiler from being too smart and allocating a stack buffer\nat the beginning of a function.\n\nBug: http://b/36206043\nTest: 32/64-bit dynamic tests pass, static ones still don\u0027t\nChange-Id: I90c575be43a9dd6c4fefc0d8b514f1ae0405b994\n"
    },
    {
      "commit": "415daa8cca875d348c003a95cf7c44c9231eae75",
      "tree": "0846b1476c61bb7d870fc8e031099d634c0c2e3c",
      "parents": [
        "e429bf2f696282537efb577feb7cb9fd534e7ace"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Mar 06 17:45:33 2017 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Mar 08 16:43:59 2017 -0800"
      },
      "message": "Increase signal stack size on 32-bit to 16kB.\n\nsnprintf to a buffer of length PATH_MAX consumes about 7kB of stack.\n\nBug: http://b/35858739\nTest: bionic-unit-tests --gtest_filter\u003d\"*big_enough*\"\nChange-Id: I34a7f42c1fd2582ca0d0a9b7e7a5290bc1cc19b1\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": "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": "bcb152903a26269e2c8ada3b27c787ae875f8812",
      "tree": "7bd88d5a8cde6ac54c1af51a11f5932988ce9215",
      "parents": [
        "f5a4992b7186c01b98cb9400b2b5b490805a87bb"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 07 21:05:30 2017 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 07 21:05:30 2017 +0000"
      },
      "message": "Revert \"Stop checking the global thread list in several trivial cases.\"\n\nThis reverts commit f5a4992b7186c01b98cb9400b2b5b490805a87bb.\n\nBreaks OMX_ImgEnc in cameraserver (http://b/35088254).\n\nChange-Id: I6dcf12706a184b0b8b72451584567a42dfa1bb4f\n"
    },
    {
      "commit": "f5a4992b7186c01b98cb9400b2b5b490805a87bb",
      "tree": "5e0da95bd6edc7fb861bf0130fcfab4997a9141a",
      "parents": [
        "4a47d2c436e93caff08fb112f39bb24145950279"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 06 14:09:53 2017 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Feb 06 14:09:53 2017 -0800"
      },
      "message": "Stop checking the global thread list in several trivial cases.\n\nSince removing the global thread is hard, let\u0027s take the different\ngroups of functions individually.\n\nThe existing code was racy anyway, because the thread might still be\non the list but have exited (leaving tid \u003d\u003d 0).\n\nBug: http://b/19636317\nTest: ran tests\nChange-Id: Icc0986ff124d5f9b8a653edf718c549d1563973b\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": "9af13d24b16141d3f931b3b3768dfe08d6584153",
      "tree": "844775e0cba6d52104fa4a22372a95e392a7b1bf",
      "parents": [
        "676f6e3c7f29d4b77de8400f3b9a0113d6bb8a3b"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Jun 02 14:40:09 2016 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Jun 02 15:02:25 2016 -0700"
      },
      "message": "Do not return with stack address in global variable.\n\nClang static analyzer gives warning when address of\nlocal variable \u0027attr\u0027 is saved in a global variable.\nThis change passes required values down to signal handler\ninstead of saving local variable address in a signal handler.\n\nChange-Id: I7955939487a5afdf7b1f47eb74a92eb5aa76cfc9\n"
    },
    {
      "commit": "baa2a973bd776a51bb05a8590ab05d86eea7b321",
      "tree": "ec24271fcc30be277ea654ef8425f4a109732f17",
      "parents": [
        "7ee8e299ba5dc7bb68c88931b04b10a69cf0f21f"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Aug 13 16:58:50 2015 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu May 05 17:11:54 2016 -0700"
      },
      "message": "Use clang\u0027s nullability instead of nonnull.\n\nhttp://clang.llvm.org/docs/AttributeReference.html#nonnull\n\n_Nonnull is similar to the nonnull attribute in that it will instruct\ncompilers to warn the user if it can prove that a null argument is\nbeing passed. Unlike the nonnull attribute, this annotation indicated\nthat a value *should not* be null, not that it *cannot* be null, or\neven that the behavior is undefined. The important distinction is that\nthe optimizer will perform surprising optimizations like the\nfollowing:\n\n    void foo(void*) __attribute__(nonnull, 1);\n\n    int bar(int* p) {\n      foo(p);\n\n      // The following null check will be elided because nonnull\n      // attribute means that, since we call foo with p, p can be\n      // assumed to not be null. Thus this will crash if we are called\n      // with a null pointer.\n      if (src !\u003d NULL) {\n        return *p;\n      }\n      return 0;\n    }\n\n    int main() {\n      return bar(NULL);\n    }\n\nNote that by doing this we are no longer attaching any sort of\nattribute for GCC (GCC doesn\u0027t support attaching nonnull directly to a\nparameter, only to the function and naming the arguments\npositionally). This means we won\u0027t be getting a warning for this case\nfrom GCC any more. People that listen to warnings tend to use clang\nanyway, and we\u0027re quickly moving toward that as the default, so this\nseems to be an acceptable tradeoff.\n\nChange-Id: Ie05fe7cec2f19a082c1defb303f82bcf9241b88d\n"
    },
    {
      "commit": "62e3a078aa7b156139b1a2cec77e1a84eb10c5a4",
      "tree": "b37425943e0cd7284b319d6cad98bd71dcfdc8bb",
      "parents": [
        "9ee905f12fa0aeb4ae0df708e15d2ffcfaf58000"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue May 03 12:08:05 2016 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue May 03 12:08:05 2016 -0700"
      },
      "message": "Fix google-explicit-constructor warnings.\n\nBug: 28341362\nChange-Id: I84effbdfa1b9b39328a909b7f70fe17e7ee316c8\n"
    },
    {
      "commit": "4d098ca912853b2c3b4bb6c50dd23b2b79e80c84",
      "tree": "6ac99a869a96ab7a32931aa66c863e3fda483865",
      "parents": [
        "c247cd1fdcadfa8b025902ec45175a73e8cb82a8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 11 12:43:05 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 11 12:43:05 2016 -0700"
      },
      "message": "Add a test for pthread_setname_np on another thread in a PR_SET_DUMPABLE 0 process.\n\nBug: http://b/28051133\nChange-Id: I9a578333815afa6bdfc1e3c3eea430a15957304f\n"
    },
    {
      "commit": "725b2a96a70c6570a1fb84562fe46348414752cd",
      "tree": "c6e4772eff6ea9ebb881ca579f14e6c4f87fc05d",
      "parents": [
        "68a2f12304e960f2045f3819c48311e7bf4d3126"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Mar 23 11:20:47 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Mar 23 17:40:25 2016 -0700"
      },
      "message": "Add pthread_getname_np.\n\nAlso guard both these GNU extensions with _GNU_SOURCE.\n\nAlso improve the tests to test each case on both the current thread and\nanother thread, since the code paths are totally different.\n\nBug: http://b/27810459\nChange-Id: I72b05bca5c5b6ca8ba4585b8edfb716a1c252f92\n"
    },
    {
      "commit": "81d2797e33d6f95c0b79e20ae8a04f2a4f3841cc",
      "tree": "4d38bcb18b0c67079d9c4dc84cae100def3b923e",
      "parents": [
        "6212e5dfada2ce1cd8b4915389452cba09e75b69"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Mar 22 13:45:55 2016 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Mar 22 13:45:55 2016 -0700"
      },
      "message": "Fix pthread.pthread_barrier_smoke test.\n\npthread_barrier_smoke test uses WaitUntilThreadSleep() to wait until\nBarrierTestHelper threads sleep in pthread_barrier_wait(). But this\nis flaky as there a two futex_wait places in pthread_barrier_wait.\nThis patch modifies this test to avoid using WaitUntilThreadSleep().\n\nBug: 27780937\nChange-Id: I4c36b82cce9345d5088f8854b289dc5bf7a08e8c\n"
    },
    {
      "commit": "61e4d461e5c1c5108fdfe2a9f1edec6717e7461e",
      "tree": "3eaf04010e6c7c3a3dcd552bfbc6be63167bf300",
      "parents": [
        "b83bd7bc256d5121ec3ff1babc3bc08d7f04eea2"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Mar 07 17:44:58 2016 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Mar 10 14:28:43 2016 -0800"
      },
      "message": "Adjust test to let it pass on libhoudini.\n\nWhen using libhoudini to run arm code on x86 platforms, we can\u0027t\nassume the main thread allocates local variables at the stack\ndeclared by kernel.\n\nChange-Id: Id9457f47fc338a3103fdee25a7a6e622915e7090\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": "d31d4c1cc65ab878c32927259fcc7ac744f7cc52",
      "tree": "5eeb297202f6499997e654971c79da41ee7ab483",
      "parents": [
        "b34ae08cc62506142c0f2407101f4914384a0d86"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 14 17:35:10 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 14 17:35:10 2015 -0800"
      },
      "message": "Add a few missing pthread tests.\n\nThis seems to be all that\u0027s tested by system/extras/tests/bionic that isn\u0027t\nalready better tested here.\n\nChange-Id: Id0aa985cefd4047a6007ba9804f541069d9e92ed\n"
    },
    {
      "commit": "aec13988dab7ff32cb005f42b952e3b9b55a4779",
      "tree": "b761ca15f68a8c174119ceff4d6316102ea0b71c",
      "parents": [
        "2bb85c848abb89951ec01342d6c8278311346395",
        "a36158a77d904aa65f50d5950b7608ef8fa3210f"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Nov 30 21:38:59 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 30 21:38:59 2015 +0000"
      },
      "message": "Merge \"Fix pthread_test according to tsan report.\""
    },
    {
      "commit": "17554356cc865908e5cbd7814c8be7e47c9c4ec5",
      "tree": "65784b6e5cd302ab21eb9de6b5ab7ed0a9ad74ce",
      "parents": [
        "a7fc7f9909c221a0f64c5c5ecc5fadd5fba467c5",
        "76144aaa6397fe9e16893882cf59c5c9c0684a66"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Nov 23 18:57:26 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 23 18:57:26 2015 +0000"
      },
      "message": "Merge \"Change _stdio_handles_locking into _caller_handles_locking.\""
    },
    {
      "commit": "74ed96d59731aa3661494330804d866e825209d3",
      "tree": "fcb3c951345fcbd19e528bce9d7579077b9130b9",
      "parents": [
        "fb3219fbd1dbb0a369d52cbd0200330fd8852bc1",
        "c9a659c57b256001fd63f9825bde69e660c2655b"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Sat Nov 21 01:50:29 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Nov 21 01:50:29 2015 +0000"
      },
      "message": "Merge \"Use FUTEX_WAIT_BITSET to avoid converting timeouts.\""
    },
    {
      "commit": "76144aaa6397fe9e16893882cf59c5c9c0684a66",
      "tree": "366d104ea020fb5d9138d296aac1fcceda383c61",
      "parents": [
        "0ebe2f07c35d4b764bc5d8b5226004e3db46da91"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Nov 19 13:52:16 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Nov 20 17:44:26 2015 -0800"
      },
      "message": "Change _stdio_handles_locking into _caller_handles_locking.\n\nIt is reported by tsan that funlockfile() can unlock an unlocked mutex.\nIt happens when printf() is called before fopen() or other stdio stuff.\nAs FLOCKFILE(fp) is called before __sinit(), _stdio_handles_locking is false,\nand _FLOCK(fp) will not be locked. But then cantwrite(fp) in __vfprintf()\ncalls__sinit(), which makes _stdio_handles_locking become true, and\nFUNLOCKFILE(fp) unlocks _FLOCK(fp).\n\nChange _stdio_handles_locking into _caller_handles_locking,\nso __sinit() won\u0027t change its value. Add test due to my previous fault.\n\nBug: 25392375\nChange-Id: I483e3c3cdb28da65e62f1fd9615bf58c5403b4dd\n"
    },
    {
      "commit": "c9a659c57b256001fd63f9825bde69e660c2655b",
      "tree": "74de618379f38c2726cc41956144f560dd6be9ea",
      "parents": [
        "b804b9d67b9e3a8c63471ff9892f6abea2a58684"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Nov 05 15:36:08 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Nov 19 13:42:03 2015 -0800"
      },
      "message": "Use FUTEX_WAIT_BITSET to avoid converting timeouts.\n\nAdd unittests for pthread APIs with timeout parameter.\n\nBug: 17569991\n\nChange-Id: I6b3b9b2feae03680654cd64c3112ce7644632c87\n"
    },
    {
      "commit": "fe3a83a9343f0e4ff654f09ef8ffc8a773c7c105",
      "tree": "092ca0be892463bc543eaaabc9feda130ad37fb1",
      "parents": [
        "b804b9d67b9e3a8c63471ff9892f6abea2a58684"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Nov 17 16:03:18 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Nov 18 17:51:21 2015 -0800"
      },
      "message": "Implement pthread spin.\n\nIn order to run tsan unit tests, we need to support pthread spin APIs.\n\nBug: 18623621\nBug: 25392375\nChange-Id: Icbb4a74e72e467824b3715982a01600031868e29\n"
    },
    {
      "commit": "a36158a77d904aa65f50d5950b7608ef8fa3210f",
      "tree": "2d2966c9d2ee0334e0cba47b65fe9e2717c4d62f",
      "parents": [
        "b804b9d67b9e3a8c63471ff9892f6abea2a58684"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Nov 16 21:06:16 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Nov 16 21:15:58 2015 -0800"
      },
      "message": "Fix pthread_test according to tsan report.\n\n1. Fix leak threads and data races related to spin_flag.\n2. Increase stack size to run under tsan.\n\nThis doesn\u0027t pass all pthread tests, as some tests are used\nto run intentionally in race situations.\n\nBug: 25392375\nChange-Id: Icfba3e141e7170abd890809586e89b99adc8bd02\n"
    },
    {
      "commit": "b804b9d67b9e3a8c63471ff9892f6abea2a58684",
      "tree": "ce42730b1964f3bd1b498823744f7d61f5527695",
      "parents": [
        "3c8c16022a513a32eb6b92cf23f4ef43ccf7ad6d",
        "e7c2fffa16eccecfd43d99516751a43776f5f609"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Nov 17 00:22:54 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Nov 17 00:22:54 2015 +0000"
      },
      "message": "Merge \"Implement pthread barrier.\""
    },
    {
      "commit": "e7c2fffa16eccecfd43d99516751a43776f5f609",
      "tree": "bceec6b32ce1159456b2b0bb7ea0ea320d0970cc",
      "parents": [
        "004fead6bc55d1e65b4fb9ca1ac36646b99e5fdd"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Nov 05 22:06:09 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Nov 16 14:02:26 2015 -0800"
      },
      "message": "Implement pthread barrier.\n\nBug: 24341262\nChange-Id: I5472549e5d7545c1c3f0bef78235f545557b9630\n"
    },
    {
      "commit": "f208361b2b7c00b1decefa4bdb7115338649686b",
      "tree": "89a5c7e9074d4c441463dfee38cc3ad24c275a59",
      "parents": [
        "ffe5c24c8693f1f4fc8edb68075fb36df558b801"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 11 13:32:28 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 11 13:32:28 2015 -0800"
      },
      "message": "Clean up pthread_gettid_np test.\n\nChange-Id: I0fad26c7824981bfa3ad3a8a0b28a1984062dcd1\n"
    },
    {
      "commit": "de1246202a229efe555170a7c5803510f5975658",
      "tree": "e6d531e81a0546cc4cda65d6b99f71f49191ec9a",
      "parents": [
        "6209b99a7351ed732ab25bb2ffa75465366b244f"
      ],
      "author": {
        "name": "Junjie Hu",
        "email": "junjie.hu@mediatek.com",
        "time": "Wed Nov 11 12:52:25 2015 +0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 11 21:21:21 2015 +0000"
      },
      "message": "Fix potential race condition on CTS TC pthread_gettid_np\n\nRoot cause:\nIf start_routine thread exits before pthread_gettid_np is invokded, the \"tid\" field\nwill be cleared so that pthread_gettid_np will get \"0\" (which is cleared by kernel, \ndue to the flag \"CLONE_CHILD_CLEARTID\" is set while calling clone system call inside\npthread_create).\n\nProposed patch:\nUse a mutex to guarantee pthread_gettid_np will be invoked and returned before the\nstart_routine exits\n\nSigned-off-by: Junjie Hu \u003cjunjie.hu@mediatek.com\u003e\n\nChange-Id: I22411f1b0f7446d76a0373cef4ccec858fac7018\n(cherry picked from commit 4f8010293506d4e08d184e66bf4af44ef3483611)\n"
    },
    {
      "commit": "0b2acdfcc99ecf3ff36fc6337e14b171170f38cf",
      "tree": "1318497b782194c7ae533f88c1aabfca0affdc7d",
      "parents": [
        "f7cf8b2c1fbf6250e12d1e59aa353990eca4f109"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 02 18:25:19 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 02 18:25:19 2015 -0700"
      },
      "message": "Use const auto\u0026 in for loops.\n\nChange-Id: Ic437c59797ee4e7dc38291da35c72d827bc89c8d\n"
    },
    {
      "commit": "15dfd63aba596f95f2478bfca36b91f69ed7f9b3",
      "tree": "390876a7919699e07d43c93b38c139ccb2913a9c",
      "parents": [
        "9e3a24915241c07d8ea886533c8de6a85744a734"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Sep 22 16:40:14 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Sep 22 16:40:14 2015 -0700"
      },
      "message": "Fix another duplicate maps parser.\n\nChange-Id: Icb69f59ffbd0d5de7f727142260fae152d36a904\n"
    },
    {
      "commit": "0dec2289211dd75e2dd99e4aad84ece845e69864",
      "tree": "0fc7ffc887c9aa50a323e081f3dbcc97a4b50d09",
      "parents": [
        "efcb5d9d4c4b482cf21318b2bb4aec6cf6d8e0f5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Sep 22 15:45:50 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Sep 22 15:45:50 2015 -0700"
      },
      "message": "Clean up /proc/\u003cpid\u003e/maps sscanfs.\n\nsscanf will swallow whitespace for us.\n\nChange-Id: I59931cbad00f0144fd33ed4749ac0aaad15e6de6\n"
    },
    {
      "commit": "33ac04a215a70d2f39f1ddec1bba5a42c0fd8bee",
      "tree": "481db0a7986cd82b887f82d53d759a6afee88f22",
      "parents": [
        "1399759118f50071d499f88b18828e36aa2bad00"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Sep 22 11:16:15 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Sep 22 11:18:26 2015 -0700"
      },
      "message": "Increase alternative signal stack size on 64-bit devices.\n\nBug: 23041777\nBug: 24187462\nChange-Id: I7d84c0cc775a74753a3e8e101169c0fb5dbf7437\n"
    },
    {
      "commit": "569333293aeefbe792826cd59140dc23704018c4",
      "tree": "9174c0192992720b8f13db88618f6ec3e491b53e",
      "parents": [
        "14545d4ce3dd446f20a14dcff37d60ff8d756f7a"
      ],
      "author": {
        "name": "Mor-sarid, Nitzan",
        "email": "nitzan.mor-sarid@intel.com",
        "time": "Fri Sep 11 05:31:36 2015 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 16 11:45:13 2015 -0700"
      },
      "message": "Fix the way to get main thread stack start address.\n\nFor previous way to get the stack using the [stack] string from\n/proc/self/task/\u003cpid\u003e/maps is not enough. On x86/x86_64, if an\nalternative signal stack is used while a task switch happens,\nthe [stack] indicator may no longer be correct.\n\nInstead, stack_start from /proc/self/stat which is always inside\nthe main stack, is used to find the main stack in /proc/self/maps.\n\nChange-Id: Ieb010e71518b57560d541cd3b3563e5aa9660750\nSigned-off-by: Nitzan Mor-sarid \u003cnitzan.mor-sarid@intel.com\u003e\nSigned-off-by: Mingwei Shi \u003cmingwei.shi@intel.com\u003e\n"
    },
    {
      "commit": "60907c7f4ec788def8741e4efb933eafb6560eaa",
      "tree": "31fb09aeffe23cdb02ed80e20989df7e1c992338",
      "parents": [
        "1cfbd94a2f40743757cdecd51cfa3e3ab545a5c5"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Jun 09 18:46:15 2015 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jun 10 10:50:43 2015 -0700"
      },
      "message": "Allow NULL in pthread_mutex_lock/unlock.\n\nThe pthread_mutex_lock and pthread_mutex_unlock were allowed to\nfail silently on L 32 bit devices when passed a NULL. We changed\nthis to a crash on 32 bit devices, but there are still games that make\nthese calls and are not likely to be updated. Therefore, once again\nallow NULL to be passed in on 32 bit devices.\n\nBug: 19995172\n(cherry picked from commit 511cfd9dc8cb41bca4920687c7d816ee916ee8e5)\n\nChange-Id: I159a99a941cff94297ef3fffda7075f8ef1ae252\n"
    },
    {
      "commit": "b0c6f2dba2dc7b1604e00d0d553ac7f38f719049",
      "tree": "2a062c9b09d580055786bade2eaf182a0cb43601",
      "parents": [
        "c02bdc76a21f6149c7867982e66ab16982e01c1b"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue May 19 15:09:23 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed May 20 14:41:15 2015 -0700"
      },
      "message": "Fix pthread_attr_getstack__main_thread failure on glibc.\n\nMove test of bionic specific implementation into bionic ifdef.\n\nBug: 19805726\nChange-Id: Idf369b16e7f41f060c75b0aaf34e05cf3c161aa9\n"
    },
    {
      "commit": "f9eeea6d6531b0dea837027c7e1f47bec837f311",
      "tree": "548529081b249b31a7d298c0f3348edfa87026a7",
      "parents": [
        "dc10b077ea52baaa1b7be42eb5d2ba05a8a8c860",
        "2957cc5f1043adf0b9c0f1cdfff2d408952e40f5"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri May 08 01:36:29 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri May 08 01:36:30 2015 +0000"
      },
      "message": "Merge \"Remove pthread_detach_no_leak test.\""
    },
    {
      "commit": "2957cc5f1043adf0b9c0f1cdfff2d408952e40f5",
      "tree": "9cfc2b6c86fb990924ce694e3108f736d2ff3350",
      "parents": [
        "c95a9e9dad126108a0106844f4d572d4cd4ae103"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu May 07 16:53:25 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu May 07 16:53:25 2015 -0700"
      },
      "message": "Remove pthread_detach_no_leak test.\n\nThis test has lost its purpose as we are using mmap/munmap for pthread_internal_t. And it is a flaky test.\n\nBug: 20860440\nChange-Id: I7cbb6bc3fd8a2ca430415beab5ee27a856ce4ea7\n"
    },
    {
      "commit": "5624a6a1e52ff959b0f88765d38f190700422773",
      "tree": "5259b59adb0536c7cc8ff950a5ce01182c432777",
      "parents": [
        "f3392791bc0f8f3638a04e15cea893c7c102f3c3"
      ],
      "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 14:15:28 2015 -0700"
      },
      "message": "Move pthread_atfork_dlclose test out of static lib\n\nBug: http://b/20858755\nChange-Id: I0d84e8b43dc33902d75af18db6b7c8e0b619d718\n"
    },
    {
      "commit": "9a2744df301c509ea48361016ab441c792ec6d5a",
      "tree": "ddb8027705abc3fdfd5355b80407ac49811d484b",
      "parents": [
        "2c256a0f0927abd94f2210b37c18ead210d30477",
        "d1aea30b2ade504550f7bb7996c808b9af1c415d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Apr 25 18:01:18 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Apr 25 18:01:18 2015 +0000"
      },
      "message": "Merge \"Fix POSIX timer thread naming.\""
    },
    {
      "commit": "d1aea30b2ade504550f7bb7996c808b9af1c415d",
      "tree": "5510d43664f9693ccab80e9b68be854d2ce9f859",
      "parents": [
        "2bb93482a7793640205ade2f7316db5b3f5cac19"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Apr 25 10:05:24 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Apr 25 10:05:24 2015 -0700"
      },
      "message": "Fix POSIX timer thread naming.\n\nSpencer Low points out that we never actually set a name because the constant\npart of the string was longer than the kernel\u0027s maximum, and the kernel\nrejects long names rather than truncate.\n\nShorten the fixed part of the string while still keeping it meaningful. 9999\nPOSIX timers should be enough for any process...\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d170089\nChange-Id: Ic05f07584c1eac160743519091a540ebbf8d7eb1\n"
    },
    {
      "commit": "ea295f68f1fae7c701baaa717f67296659d567ac",
      "tree": "745388310ffe715acbfd96b3cedfe55ccb50a2ca",
      "parents": [
        "ebfb55e4cdf03473d66eaf5928fb3c3a8b0c2f85"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Nov 20 20:47:02 2014 -0800"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Apr 24 17:57:37 2015 -0700"
      },
      "message": "Unregister pthread_atfork handlers on dlclose()\n\nBug: http://b/20339788\nChange-Id: I874c87faa377645fa9e0752f4fc166d81fd9ef7e\n"
    },
    {
      "commit": "094f58fb2a57d1ed5736ae3588bf0355618f915b",
      "tree": "8f41a50086a97f88be5bf98d2a2806a26d854d5a",
      "parents": [
        "6df122f8528f9b9fcf7dfea14ae98b0ef66274e1"
      ],
      "author": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Apr 24 03:45:59 2015 +0000"
      },
      "committer": {
        "name": "Dimitry Ivanov",
        "email": "dimitry@google.com",
        "time": "Fri Apr 24 03:46:57 2015 +0000"
      },
      "message": "Revert \"Unregister pthread_atfork handlers on dlclose()\"\n\n The visibility control in pthread_atfork.h is incorrect.\n It breaks 64bit libc.so by hiding pthread_atfork.\n\n This reverts commit 6df122f8528f9b9fcf7dfea14ae98b0ef66274e1.\n\nChange-Id: I21e4b344d500c6f6de0ccb7420b916c4e233dd34\n"
    },
    {
      "commit": "6df122f8528f9b9fcf7dfea14ae98b0ef66274e1",
      "tree": "5a59eb4d1148b6218b8a06895baf6176f17b995b",
      "parents": [
        "ff18108981aa1fa73696d6db1919cdc38788bd4e"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Nov 20 20:47:02 2014 -0800"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Wed Apr 22 19:19:37 2015 -0700"
      },
      "message": "Unregister pthread_atfork handlers on dlclose()\n\nChange-Id: I326fdf6bb06bed12743f08980b5c69d849c015b8\n"
    },
    {
      "commit": "8f3f04184a5772b421867b59acd3d0dfbc6fa4eb",
      "tree": "df95970c47bdea9e89cb5f64ef69f9ff39aef5d5",
      "parents": [
        "447cd19681cfd0a71282c87d1b32a7757bbaba81",
        "5ddbb3f936ee44555a46020239e49ab45109a806"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Apr 14 20:35:08 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 14 20:35:08 2015 +0000"
      },
      "message": "Merge \"Prevent using static-allocated pthread keys before creation.\""
    },
    {
      "commit": "5ddbb3f936ee44555a46020239e49ab45109a806",
      "tree": "70395ecf0897580781856c68cbcd57019ff831e3",
      "parents": [
        "4bd8f9637daaada333ff35945b00cfe6cb822376"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Mar 05 20:35:32 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Apr 14 13:32:09 2015 -0700"
      },
      "message": "Prevent using static-allocated pthread keys before creation.\n\nBug: 19993460\n\nChange-Id: I244dea7f5df3c8384f88aa48d635348fafc9cbaf\n"
    },
    {
      "commit": "76615dae93c18ac890e167c547a08c0228709a33",
      "tree": "12a7e87c6fb332bebc087f43bcf29b2f7827571e",
      "parents": [
        "4bd8f9637daaada333ff35945b00cfe6cb822376"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Mar 17 14:22:09 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Apr 08 13:11:13 2015 -0700"
      },
      "message": "Provide writer preference option in rwlock.\n\nPrevious implementation of rwlock contains four atomic variables, which\nis hard to maintain and change. So I make following changes in this CL:\n\n1. Add pending flags in rwlock.state, so we don\u0027t need to synchronize\nbetween different atomic variables. Using compare_and_swap operations\non rwlock.state is enough for all state change.\n\n2. Add pending_lock to protect readers/writers waiting and wake up\noperations. As waiting/wakeup is not performance critical, using a\nlock is easier to maintain.\n\n3. Add writer preference option.\n\n4. Add unit tests for rwlock.\n\nBug: 19109156\n\nChange-Id: Idcaa58d695ea401d64445610b465ac5cff23ec7c\n"
    },
    {
      "commit": "f796985923e2d8308e00ed9567f36546dafb98d7",
      "tree": "4fd9bbdae36ecfd15a4e08cdad3c7818995760ec",
      "parents": [
        "06b6e3c51d38d70c5ca99f3a3f795697031ac27f"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Apr 02 17:47:48 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Apr 03 19:01:17 2015 -0700"
      },
      "message": "Fix bug for recursive/errorcheck mutex on 32-bit devices.\n\nBug: 19216648\nChange-Id: I3b43b2d18d25b9bde352da1e35f9568133dec7cf\n"
    },
    {
      "commit": "00d1101cc170ce786f26143a897b4a3e3363b55f",
      "tree": "38c9343d5aa084c672c6932787c8adab09851c68",
      "parents": [
        "618935d2679e84cc839316c042ee3dde5f7d7097",
        "e69c24543db577d8b219ab74b0ba7566e0f13b38"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Apr 02 20:27:40 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 02 20:27:40 2015 +0000"
      },
      "message": "Merge \"Refactor pthread_mutex to support 32-bit owner_tid on 64-bit devices.\""
    },
    {
      "commit": "e69c24543db577d8b219ab74b0ba7566e0f13b38",
      "tree": "5591f3540876c166a08b80815d1d257d8b98a5eb",
      "parents": [
        "611fd2cc91f79be6759f6e630e1e81998326dfe8"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Feb 13 16:21:25 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Apr 01 21:12:22 2015 -0700"
      },
      "message": "Refactor pthread_mutex to support 32-bit owner_tid on 64-bit devices.\n\nBug: 19216648\nChange-Id: I765ecacc9036659c766f5d1f6600e1a65364199b\n"
    },
    {
      "commit": "6170693e28dd72a1517c267f3f62b3f37477b8bb",
      "tree": "f7cf73e397d83074a6da0b6cce4459b51af334cf",
      "parents": [
        "611fd2cc91f79be6759f6e630e1e81998326dfe8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 31 10:56:58 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 31 10:56:58 2015 -0700"
      },
      "message": "Make ThreadLocalBuffer a class rather than a macro.\n\nBug: 19995392\nChange-Id: I497c512648fbe66257da3fb3bcd5c9911f983705\n"
    },
    {
      "commit": "8f3eb5a4e5dbbac1fb431e40e25eec07ecc24ee8",
      "tree": "6eaa84d2960c9e3788093101dd9ae2c9d9426ad7",
      "parents": [
        "7c01e3a9ba80c85c7e7998d2347885e9a6e3bbf2",
        "220b99bdc1c5f51825ac2a87062bc05fe3e0d722"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Mar 26 18:14:22 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 26 18:14:23 2015 +0000"
      },
      "message": "Merge \"Revert \"Cause Fatal error when invalid pthread_id is detected.\"\""
    },
    {
      "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": "17393b06bab9cb3e95d0f466a56c746de19b8eee",
      "tree": "fa260e58da8fe186bca7787e3d7645a86b2f79cb",
      "parents": [
        "fa3dcecc0fd7bbbf04234e41be690a5d33277870"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Sat Mar 21 15:08:25 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Mar 25 17:54:17 2015 -0700"
      },
      "message": "Hide internal of pthread_mutex_t.\n\nBug: 19249079\nChange-Id: Iffb79c8d861b698d474f212dc80c638fc2cf1620\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": "b58457221364eaad039c2c49a42626b725e980d5",
      "tree": "a7a8d9b3de7c34bda99153ebae330b6d180b112e",
      "parents": [
        "4149dc944bbe3c5f1c14fc998106975e68bdd6bf"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Mar 16 22:46:42 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Mar 20 17:42:09 2015 -0700"
      },
      "message": "Add test for pthread types alignment check.\n\nBug: 19249079\nChange-Id: I83c4f0d11ec5d82a346ae0057d02a92bb1d519e8\n"
    },
    {
      "commit": "bbb0432a33787f1a627abb396fe343a7943ac7bc",
      "tree": "356c2b33690b7c1e43c4d5a4ba46d0553b1e06f6",
      "parents": [
        "7875b506edfb1fe593034eaf4bc9aa156179fbd2"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Mar 19 15:19:25 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Mar 19 16:48:19 2015 -0700"
      },
      "message": "Return EINVAL when calling pthread_detach for joined thread.\n\nChange-Id: I717015132187e087e0ad485284a13c8801e25e77\n"
    },
    {
      "commit": "5490bebd7cdd4406780358f590391b75ab8a7d84",
      "tree": "845211310385c3998a280b73553ef7b852a725b6",
      "parents": [
        "5f8ddf69e59b13653d016e236599b95daf6501a8",
        "5b8e7cd957f9380e93c3aee84962d157fe0bc526"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Mar 17 18:12:32 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Mar 17 18:12:32 2015 +0000"
      },
      "message": "Merge \"Remove duplication in pthread_mutex.cpp.\""
    },
    {
      "commit": "cb0443c0fa07e4c049f426e3041894df522732df",
      "tree": "381413df3bfbe60beb5b974fa0b81a69c13c6bbb",
      "parents": [
        "169a84f980d7a55c5f829cdd53a3eaba8f968442"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Mar 16 14:15:46 2015 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Mar 16 14:20:57 2015 -0700"
      },
      "message": "Remove obsolete test_isolated wrapper function\n\n We already run all of our tests in isolated mode.\n\nChange-Id: I8236baa302b1026a9b4a1c33a4aa65e223771bc7\n"
    },
    {
      "commit": "32651b8e8e453391c7aaca47cd885e94d54d0bf4",
      "tree": "16c36165ce78fbc359bba222ee0744556c3ed4c4",
      "parents": [
        "d2cf59d4633d9e731d0342d4f94b6e925589ab1e"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Mar 13 20:30:00 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Mar 16 11:09:52 2015 -0700"
      },
      "message": "Hide content of pthread_cond_t in pthread_cond_internal_t.\n\nBug: 19249079\nChange-Id: I6f55af30bcd6211ce71630c6cacbef0e1663dcee\n"
    },
    {
      "commit": "5b8e7cd957f9380e93c3aee84962d157fe0bc526",
      "tree": "c454f02e61518005d531a825e2f0469fac261bbf",
      "parents": [
        "c3307dc43b2526c4031837738b139d22831c5d09"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Mar 04 17:36:59 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Mar 12 21:54:41 2015 -0700"
      },
      "message": "Remove duplication in pthread_mutex.cpp.\n\nAlso add unit tests about thread woken up by pthread_mutex_unlock.\n\nBug: 19216648\n\nChange-Id: I8bde8105b00186c52a2f41d92458ae4a5eb90426\n"
    },
    {
      "commit": "08ee8d2030fbc73c4c144e819dd68806b0351cbe",
      "tree": "61c0f1027bd8967ff7eb8e95a128ee10e260ca32",
      "parents": [
        "ee17e8800418a74e21dba11658234363cf6f6032"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Feb 11 17:04:36 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Mar 04 18:16:20 2015 -0800"
      },
      "message": "Switch pthread_rwlock_t to stdatomic.\n\nBug: 19099838\nChange-Id: Ie82967a60b5cec61a8bdd1e0e4a03738d01944f8\n"
    },
    {
      "commit": "140f3678f0f21eeda5916e9b8de87b93fd660a61",
      "tree": "4115c771e910e8969cb093fa124df987259bad3c",
      "parents": [
        "86fc96f73311f43980df770f4ff8022f1e9b296a"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Feb 03 10:32:00 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Feb 03 12:20:46 2015 -0800"
      },
      "message": "Add test about pthread_mutex_t owner tid limit.\n\nBug: 19216648\nChange-Id: I7b12955bdcad31c13bf8ec2740ff88ba15223ec0\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": "917d390510e442b9b030d54992ebf41cc1e7f853",
      "tree": "fd11b414b2b5f550c20944d916b07533d125b061",
      "parents": [
        "b5e508cfee2355bad0502587e4fce8f4173584d6"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Jan 08 12:32:42 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Jan 08 14:27:24 2015 -0800"
      },
      "message": "Make pthread stack size match real range.\n\nBug: 18908062\nChange-Id: I7037ac8273ebe54dd19b1561c7a376819049124c\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": "6c238f2926e69a950f0671ae5519584c20d84196",
      "tree": "a3593ca9ef0940c7518e47632c67047ad89cad40",
      "parents": [
        "6d634f9baaf804a91c97e019c832c1e9611a903a"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Dec 11 20:50:41 2014 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Dec 12 17:00:08 2014 -0800"
      },
      "message": "Fix pthread key num calculation.\n\nBug: 18723085\nChange-Id: Iba2c834b350e4cdba0b2d771b221560a3e5df952\n"
    },
    {
      "commit": "634816055f51c536d24dea30dfe930b7fe2fa603",
      "tree": "5d3739b116df16774776010538254c10007c0a76",
      "parents": [
        "f64c43ba6c9244c50e904961dc432f04b1dfcfd9"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Dec 01 17:41:04 2014 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Dec 08 21:52:43 2014 -0800"
      },
      "message": "support _POSIX_REALTIME_SIGNALS\n\nBug: 18489947\nChange-Id: I2e834d68bc10ca5fc7ebde047b517a3074179475\n"
    },
    {
      "commit": "0864d8bc47d57a3e63c1444dad1e263dd310d64f",
      "tree": "0764c189236fa70909373e7e4325beb4e474cce0",
      "parents": [
        "8b4b82733877928da429e47d9a9bb73317517b2e"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Nov 20 21:21:26 2014 -0800"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Nov 20 22:53:59 2014 -0800"
      },
      "message": "Rename test_forked -\u003e test_isolated\n\nChange-Id: Ie72627e986c159832cbd3635d8ff5b1af3d5b1eb\n"
    },
    {
      "commit": "00e37818a704fdd3d5f6a59022eff3a29b03bcce",
      "tree": "74624be83ed7c21f7a5330bcb8a649e22bfa6079",
      "parents": [
        "6b48b20a1e613dcb41704deb266142a7cc45588c"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Nov 20 16:53:47 2014 -0800"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Nov 20 17:11:06 2014 -0800"
      },
      "message": "Add test_forked() option\n\n Executing test via test_forked() allows us to\n avoid undesired global state changes in tests like\n atexit, dlopen(.., RTLD_NODELETE) and similar.\n\nChange-Id: I118cdf009269ab5dd7b117c9b61dafa47de2a011\n"
    },
    {
      "commit": "68d98d832b7935ed5be23836c481a14f00b19ef1",
      "tree": "8055b8a2ba805a99544318feca3d7d894fe93955",
      "parents": [
        "92a585c91a83e63949431c617de936742b080150"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 12 21:03:26 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 12 21:03:26 2014 -0800"
      },
      "message": "Assume glibc \u003e\u003d 2.15.\n\nThis catches one trivial difference between us and glibc --- the error\nreturned by pthread_setname_np for an invalid pthread_t.\n\nChange-Id: If4c21e22107c6488333d11184f8005f8669096c2\n"
    },
    {
      "commit": "9df70403d95f5cfe6824e38a9a6c35f9b9bbc76a",
      "tree": "5a2914b5db892fa3d2c17caf9e9a53f7fc0a5d93",
      "parents": [
        "2311383180aee9388d28b03901a1e4ef021bcfa7"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Nov 05 18:01:01 2014 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Nov 06 11:09:03 2014 -0800"
      },
      "message": "make all bionic death tests not dumpable\n\nBug: 18067305\n\nChange-Id: Ia1ecacf47eddecc9bc58aaac779e0c218f463179\n"
    },
    {
      "commit": "ed29e858d09906bc28e79d919af1d09f0538a464",
      "tree": "d861bcbf17cdde6337d941fb8cb33531cdc2c08c",
      "parents": [
        "021b6412f7b7ce73b383480b25a8e5d69323f78c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 27 12:01:51 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 27 12:01:51 2014 -0700"
      },
      "message": "pthread_setname_np appears in glibc 2.12.\n\nAnd our emulator kernels are now new enough to not require a workaround.\n\nChange-Id: Id56c983dbfd8abc69f72a78411a5502391941dfc\n"
    },
    {
      "commit": "4199695657e9500db14ab40392e3715db1826002",
      "tree": "dcecb8b9c15dc0f42582132efdb37852afb32830",
      "parents": [
        "f56a2f5ed2508e0743581003420c0f2d9cb54c7b"
      ],
      "author": {
        "name": "Derek Xue",
        "email": "derek.xue@linaro.org",
        "time": "Thu Sep 25 11:05:32 2014 +0100"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 24 18:54:42 2014 -0700"
      },
      "message": "bionic tests: migrate test for mutex type from system/extras\n\nMigrate the test about pthread mutex type in file\n    system/extras/tests/bionic/libc/bionic/test_mutex.c\nto the new place\n    bionic/tests/pthread_test.cpp\nin the gtest format.\n\nChange-Id: I6aab10170ccad5b9a4892d52dba2403876c86659\nSigned-off-by: Yongqin Liu \u003cyongqin.liu@linaro.org\u003e\n"
    },
    {
      "commit": "c4bcc75f094206f3a6af767a5f6033ad44253b70",
      "tree": "31cddb500d4291b6466634e7a303d7c7035cc4b8",
      "parents": [
        "0481471b1bb95a90f632a9fb59c7a1767b9836c8"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Sep 30 11:48:24 2014 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Sep 30 15:40:14 2014 -0700"
      },
      "message": "Clean up the pthread key tests.\n\nThe previous pthread_key_create_many test was really\npthread_key_create_all, which has proven very difficult to test\ncorrectly (because it is affected by any other parts of the system using\npthread keys, and that can vary with test ordering). It also tested\nexpected values of PTHREAD_KEYS_MAX and the associated sysconf() value,\nrather than those being in their own test.\n\nInstead, split this test into a few distinct tests:\n\n * pthread.pthread_keys_max\n * pthread._SC_THREAD_KEYS_MAX_big_enough_for_POSIX\n * pthread.pthread_key_many_distinct\n     * We actually didn\u0027t have a test to ensure that the keys we were\n       creating were distinct.\n * pthread.pthread_key_EAGAIN\n     * Make sure pthread_key_create() will _eventually_ fail with\n       EAGAIN, not at a (sometimes incorrectly) predetermined maximum.\n\nChange-Id: Iff1e4fdcc02404094bde0418122c64c227cf1702\n"
    },
    {
      "commit": "34c987a6dd6816eff98bc25f627659550c2338dc",
      "tree": "d89e78081474964db297083031b9572f77e8133a",
      "parents": [
        "d9cb0ed281f0301ec2ca6828f0acc1ed08dceb8a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Sep 22 16:01:26 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Sep 22 16:27:19 2014 -0700"
      },
      "message": "Test pthread_cleanup_push(3)/pthread_cleanup_pop(3).\n\nChange-Id: I5a623fa1e1da55f11d51f3a9bdfa0627698c486f\n"
    },
    {
      "commit": "8fb639ca9118a6522723d0bc09db59b432a803a9",
      "tree": "40b074daa7dd81badacb728e905a3b70530f1253",
      "parents": [
        "69c2d7dc6434c7e7e9bd22797deb7f727199ab0c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 12 14:43:07 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 12 14:43:07 2014 -0700"
      },
      "message": "Add a test for pthread_gettid_np.\n\nBug: 17475191\nChange-Id: I8c6a2f4ceba2d24a77ae9a21269edce523aea421\n"
    },
    {
      "commit": "d9ff7226613014056c9edd79a68dc5af939107a0",
      "tree": "9866b50193d3886937a4ea13a5c3f88de7600f20",
      "parents": [
        "3c3624f3df14590e7213d35c3b39a0a11c7d2d34"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Sep 08 16:22:22 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Mon Sep 08 17:51:31 2014 -0700"
      },
      "message": "Refactoring: C++11 style DISABLE_ bionic marcos\n\n  Enable the -std\u003dgnu++11 flag for libstdc++ static and\n  dynamic libs.\n\n  ScopeGuard uses DISABLE_ macros instead of \u0027\u003d delete\u0027;\n\nChange-Id: I07e21b306f95fffd49345f7fa136cfdac61e0225\n"
    },
    {
      "commit": "27a9aed81978af792cb06035a1619c8141a5fb5b",
      "tree": "7980f076768d6a82286d2c7e62a56e7febad4d5e",
      "parents": [
        "c74a7680a409cd9f0cd3847b59e20ac16ad05806"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 04 16:09:25 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 04 16:09:25 2014 -0700"
      },
      "message": "Fix pthread_attr_getstack__main_thread.\n\nThere were two problems here:\n\n* This would fail when run with unlimited stack, because it didn\u0027t know\n  that bionic reports unlimited stacks as 8MiB.\n\n* This would leave RLIMIT_STACK small, causing failures to exec (so the\n  popen and system tests would fail).\n\nChange-Id: I5b92dc64ca089400223b2d9a3743e9b9d57c1bc2\n"
    },
    {
      "commit": "1d53ae2a01df5c85d23b01e44880103e118712f3",
      "tree": "a12e3f3fa3ff8eaa6a1e61fb73c2b9f357229799",
      "parents": [
        "5120bcf9f11951bffd8ac595c2b70252ed4a4958"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Sep 02 15:24:26 2014 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Sep 02 15:24:26 2014 -0700"
      },
      "message": "Prevent a few test pthread keys from leaking.\n\nBug: 17358010\nChange-Id: Ie718dc215ddfd431650295a1630c1b1716760c3d\n"
    },
    {
      "commit": "9e4ffa7032eaab308876b8e3da86b05c3c613878",
      "tree": "83e23ad0b0ba82c017cbf292abd7594d2148f316",
      "parents": [
        "34da32e7dd00270e98b845f8a810a6f12ffffb9b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 27 15:32:01 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 27 15:32:01 2014 -0700"
      },
      "message": "Have pthread_attr_getstack for the main thread report RLIMIT_STACK...\n\n...rather than just what\u0027s already mapped in. This seems somewhat\ncontrary to POSIX\u0027s \"All pages within the stack described by stackaddr\nand stacksize shall be both readable and writable by the thread\", but\nit\u0027s what glibc does.\n\nBug: 17111575\nChange-Id: If9e2dfad9a603c0d0615a8123aacda4946e95b2c\n"
    },
    {
      "commit": "57b7a6110e7e8b446fc23cce4765ff625ee0a105",
      "tree": "e2578675ae1435988a645a32182ced476f802ec5",
      "parents": [
        "a4a8c4feb8cf3cebf8aceace70e699e128095b5c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 25 17:26:50 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Aug 26 10:36:38 2014 -0700"
      },
      "message": "Fix pthread_getattr_np for the main thread.\n\nOn most architectures the kernel subtracts a random offset to the stack\npointer in create_elf_tables by calling arch_align_stack before writing\nthe auxval table and so on. On all but x86 this doesn\u0027t cause a problem\nbecause the random offset is less than a page, but on x86 it\u0027s up to two\npages. This means that our old technique of rounding the stack pointer\ndoesn\u0027t work. (Our old implementation of that technique was wrong too.)\n\nIt\u0027s also incorrect to assume that the main thread\u0027s stack base and size\nare constant. Likewise to assume that the main thread has a guard page.\nThe main thread is not like other threads.\n\nThis patch switches to reading /proc/self/maps (and checking RLIMIT_STACK)\nwhenever we\u0027re asked.\n\nBug: 17111575\nSigned-off-by: Fengwei Yin \u003cfengwei.yin@intel.com\u003e\nChange-Id: I1d4dbffe7bc7bda1d353c3a295dbf68d29f63158\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": "ebb770f90d9a8d7f75a9d8b0e6a96ded96c617af",
      "tree": "6b70574665d414ccc2b3d90921bdc7a196e4a415",
      "parents": [
        "ba4ebf78ad29ab2ee57c05807140bdf751f59cc6"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 25 13:46:46 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 25 13:46:46 2014 -0700"
      },
      "message": "Add a new pthread_key_delete test.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d66813\nChange-Id: Ida87bc1fb15a73a08c223a7099456d9f049cd3c5\n"
    },
    {
      "commit": "92687e41bcf108957944dafa80a9bfda219bfb0f",
      "tree": "ea0fc1323572eedebb34802ab97b24c17ec9b1ba",
      "parents": [
        "4f6ed4a10951cbd868fec1b0117a276918c60fa1"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu May 22 19:21:22 2014 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri May 23 00:22:58 2014 +0100"
      },
      "message": "Cleaned up pthread rwlocks implementation.\n\n- used underscore_style_for_vars\n- extracted time related functionality into a function\n- cleaned up style\n- removed unused fields from pthread_rwlock_t on LP64\n- changed reservation in pthread_rwlock_t so that the size of the\nstructure equals glibc version\n\nBug: 8133149\n\nChange-Id: I84ad3918678dc7f5e6b3db9b7e9b0899d3abe9cd\n"
    },
    {
      "commit": "76f352eec12d8938101e5ae33429c72797c3aa23",
      "tree": "56eed6c22d5365278b4184921e70bbae4d0e7523",
      "parents": [
        "9b95ea936a72532c3124963312d348c6ee453d78"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Mon May 19 13:41:10 2014 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu May 22 11:11:15 2014 +0100"
      },
      "message": "Mutex-free implementation of pthread_rwlock\n\nBug: 8133149\nChange-Id: Id6775010d95f2634b173daa55d87a59a3cf4131b\n"
    },
    {
      "commit": "3694ec6c4b644064f7e00b898cd11e138e4f6c09",
      "tree": "9eab4a160dacd3a71ac6d43db983ed4b965968b4",
      "parents": [
        "e6c27a7af7a9b13e4e3d3ebd604d28effa9e9322"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 14 11:46:08 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 14 11:46:08 2014 -0700"
      },
      "message": "Add a regression test for a long-fixed pthread_once bug.\n\nBug: 1934122\nChange-Id: Iae09baedc2c6ed4036521e51718fe9d015bc56b9\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": "954cf0d4e2669f91194b45f484152e47efa4f6c7",
      "tree": "a367f6590dcf1723983c7396a63bb6174b94b8e9",
      "parents": [
        "170daa042cb0ef3e5d7839f79d052a683b3c670f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 08 19:00:23 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 08 19:00:23 2014 -0700"
      },
      "message": "Hide the __bionic_clone and __bionic_clone_entry implementation details.\n\nclone(2) is the public symbol.\n\nAlso switch a test from __bionic_clone to clone; testing public API\nmeans the test now works on glibc too.\n\nChange-Id: If59def26a00c3afadb8a6cf9442094c35a59ffde\n"
    },
    {
      "commit": "04620a3cd7bdea0d1b421c8772ba3f06839bbe9c",
      "tree": "cbc1d4ecfc8e681d69dc7658f91c3078b46bd4bd",
      "parents": [
        "333e2ae87dac85d6420786e9e12ffd7ea84dae38"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 07 17:59:05 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 07 17:59:05 2014 -0800"
      },
      "message": "Fix pthread_detach for already-exited threads.\n\nChange-Id: I2bf7f41234d93b226132a4c51705f4186f4961c3\nReported-by: Paresh Nakhe \u003cpnakhe@codeaurora.org\u003e\n"
    },
    {
      "commit": "4b558f50a42c97d461f1dede5aaaae490ea99e2e",
      "tree": "c239a686131cdda28272c961ce98febbc0c772f8",
      "parents": [
        "bef5016491eed41521f514d5c5528e2274689948"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 04 15:58:02 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 07 16:49:46 2014 -0800"
      },
      "message": "Rewrite the POSIX timer functions.\n\nThis is a much simpler implementation that lets the kernel\ndo as much as possible.\n\nCo-authored-by: Jörgen Strand \u003cjorgen.strand@sonymobile.com\u003e\nCo-authored-by: Snild Dolkow \u003csnild.dolkow@sonymobile.com\u003e\nChange-Id: Iad19f155de977667aea09410266d54e63e8a26bf\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": "51e6cb33e3d7c2f44864d356a2a8e66317688f55",
      "tree": "48863111f16d659bbc0456662d67f5fc8ff3bef2",
      "parents": [
        "2c7c79e6e5e730553281b6d42e734ee2c532a660"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Mar 03 15:38:51 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Mar 04 11:17:13 2014 +0000"
      },
      "message": "Implement pthread_condattr_{get,set}clock.\n\nWe only support CLOCK_REALTIME and CLOCK_MONOTONIC for now,\nso we us a single bit from pthread_cond_t-\u003evalue to denote\nthe clock type. Note that this reduces the width of the counter\nto 30 bits, but this should be large enough for all practical\npurposes.\n\nbug: 13232338\n\nChange-Id: I857e7da64b3ecbb23eeac7c9f3fbd460f60231bd\n"
    },
    {
      "commit": "f04935c85e0b466f0d30d2cd4c0fa2fff62e7d6d",
      "tree": "8f1c6af75517892648f49adad9d4d5d44c20f49c",
      "parents": [
        "e163a3986aa7d1c67fe3274eb9204812be0a6245"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Dec 20 18:43:21 2013 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Feb 06 20:12:21 2014 -0800"
      },
      "message": "Make sure that the same tests are on all platforms.\n\nIn order to be able to generate a list of tests for cts, the same set of\ntests must exist across all platforms. This CL adds empty tests where a\ntest was conditionally compiled out.\n\nThis CL creates a single library libBionicTests that includes all of\nthe tests found in bionic-unit-tests-static.\n\nAlso fix a few missing include files in some test files.\n\nTested by running and compiling the tests for every platform and\nverifying the same number of tests are on each platform.\n\nChange-Id: I9989d4bfebb0f9c409a0ce7e87169299eac605a2\n"
    },
    {
      "commit": "718a5b5495ae7726aabd2f8a748da9f391d12b98",
      "tree": "9f2062d2a222d79dc70d3b81bd608e91a28ffb70",
      "parents": [
        "c75e7726ea5167ea03c512c7c35117762548d93f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 28 17:02:03 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 28 17:02:03 2014 -0800"
      },
      "message": "Fix pthread_test to work with gtest 1.7.0.\n\nNow we\u0027re building it correctly configured, gtest takes a couple of\nTLS slots for itself.\n\nChange-Id: I1c2c4e9e5f9c6e2e2e6ecd1214cfc16a5af5afed\n"
    },
    {
      "commit": "dd00364807020a244aa8be4f3481f7ec0fefcc79",
      "tree": "5fce5f43c4b6aac8a5a0bb64ec1d01c06c308c5d",
      "parents": [
        "c1c3f7d4468f02adbf8ced689d738386e42af773"
      ],
      "author": {
        "name": "Chris Dearman",
        "email": "chris.dearman@imgtec.com",
        "time": "Sat Jan 04 12:57:39 2014 +0000"
      },
      "committer": {
        "name": "Chris Dearman",
        "email": "chris.dearman@imgtec.com",
        "time": "Sat Jan 04 13:14:35 2014 +0000"
      },
      "message": "Pass a valid stack pointer to __bionic_clone in pthread.__bionic_clone\n\n__bionic_clone modifies the child stack before cloning so the stack\npointer should be valid. The test is expecting an EINVAL error to be\ngenerated from the incorrect flags: CLONE_THREAD set without\nCLONE_SIGHAND.\n\nChange-Id: Ic02192081f6f52df6f03d9810efa82d923247a11\n"
    },
    {
      "commit": "1887621de8a48eece8a05f2400ddd783b9833147",
      "tree": "73707f9768954e6d68f077febc4f442e2010609e",
      "parents": [
        "38fcbbb35a40c46e96b4df10d670d1c132910854"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 12 11:02:41 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 12 12:51:08 2013 -0800"
      },
      "message": "PTHREAD_KEYS_MAX cleanup.\n\nI fixed this bug a while back, but didn\u0027t remove it from the list,\ncould have added a better test, and could have written clearer code\nthat didn\u0027t require a comment.\n\nChange-Id: Iebdf0f9a54537a7d5cbca254a5967b1543061f3d\n"
    }
  ],
  "next": "877ec6d90418ff1d6597147d355a2229fdffae7e"
}
