)]}'
{
  "log": [
    {
      "commit": "60ddedff0b34f0058780b8cdbdeacef667526d08",
      "tree": "7e301fc90ef9aa777f18bb29441c4554591f2386",
      "parents": [
        "d5172fced0f88114e21086db5defaee64371de32"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Feb 20 15:40:02 2018 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Feb 20 15:40:02 2018 -0800"
      },
      "message": "Build bionic/tests with cpp_std experimental.\n\nTest: bionic unit tests still pass.\nChange-Id: I1ff5c0fa391ae111ac19e863ef0f7f29868406e6\n"
    },
    {
      "commit": "a026108ec10c0b711add1e5fb920710ced4a9046",
      "tree": "481b943639b90a725b8469d5ab367ff679103e8f",
      "parents": [
        "b82dcc6fa70a31f6014b069fb97c4a25faebea2c",
        "2dec3d7021fca57721ca7cd973d63ef817557aee"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Sat Feb 03 02:03:47 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Feb 03 02:03:47 2018 +0000"
      },
      "message": "Merge \"Avoid abort when calling pthread_mutex_destroy more than once.\""
    },
    {
      "commit": "2dec3d7021fca57721ca7cd973d63ef817557aee",
      "tree": "138d1d646af52de9a7c10f05fa143649883489a4",
      "parents": [
        "5a00ba7c1c5d563b58255257898fe0a5903933eb"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Feb 02 15:45:24 2018 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Feb 02 15:45:24 2018 -0800"
      },
      "message": "Avoid abort when calling pthread_mutex_destroy more than once.\n\nBug: http://b/72878088\nTest: run bionic-unit-tests.\nChange-Id: I0c3a6c5a625d187d5f32ec8c821cfdd5e807a671\n"
    },
    {
      "commit": "b82dcc6fa70a31f6014b069fb97c4a25faebea2c",
      "tree": "a5990c3e25acd17d3d8e1ac7425e92e73b9e0f31",
      "parents": [
        "ed95f37bc89ab40c54b67bfc57a6fae16fc77e7a",
        "5a00ba7c1c5d563b58255257898fe0a5903933eb"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Feb 02 19:44:51 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 02 19:44:51 2018 +0000"
      },
      "message": "Merge \"Support priority inheritance mutex in 32-bit programs.\""
    },
    {
      "commit": "5a00ba7c1c5d563b58255257898fe0a5903933eb",
      "tree": "083ed71cdeb769c6de53fd333ca249ff77ab8f3d",
      "parents": [
        "2e2a8930e5f9eb2d9ea4fdb61f746c6f2e2048ac"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Jan 26 17:32:31 2018 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Feb 01 16:01:46 2018 -0800"
      },
      "message": "Support priority inheritance mutex in 32-bit programs.\n\nAdd fast path calling PIMutexTryLock() in pthread_mutex_lock.\nAdd trace for pi mutex waiting.\n\nBug: http://b/29177606\nTest: run bionic-unit-tests.\nTest: run bionic-benchmarks.\n\nChange-Id: I30b6436692d5ea6b63ca9905df745edb843b5528\n"
    },
    {
      "commit": "d8fde3f8a9210789c97dfcc16f048fd20c1ec0ec",
      "tree": "92e4fe3ed9dddb34bba5b8598e9b114d99c3884a",
      "parents": [
        "5dbbf78bd7e4508476c2690e19f8d4ae7fc5feb8",
        "5905d6f8797056ca4178d42bf1220b6692e557a5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 31 17:04:31 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jan 31 17:04:31 2018 +0000"
      },
      "message": "Merge \"Add `sigset64_t` and accompanying functions.\""
    },
    {
      "commit": "6dfa5b55a53bb7da93e41f4d3c9f073f74a2769e",
      "tree": "24507d73823e21b85950a7669cbc078ecadbe8e7",
      "parents": [
        "4cd3550d50cb14efe3d86ab9732ce75def5b85bd"
      ],
      "author": {
        "name": "dimitry",
        "email": "dimitry@google.com",
        "time": "Tue Jan 30 13:24:28 2018 +0100"
      },
      "committer": {
        "name": "dimitry",
        "email": "dimitry@google.com",
        "time": "Wed Jan 31 10:20:15 2018 +0100"
      },
      "message": "Make pthread_attr_getstack__main_thread test native-bridge friendly\n\nDetect stack mappings based on a pointer to the stack instead of\nrelying on \"[stack]\" label. This does not change the test but\nmakes it native-bridge friendly. In translated environment native\nbridge implementation may have a separate stack for the guest code.\n\nBug: http://b/30443561\nTest: bionic-unit-tests --gtest_filter\u003dpthread*\nChange-Id: Ic98a3b74b43ec63c7b37821a1f86525d32efd459\n"
    },
    {
      "commit": "5905d6f8797056ca4178d42bf1220b6692e557a5",
      "tree": "222848ae0ced32fcf2028a2c6502b4a763c83830",
      "parents": [
        "d435d256da57fdf4278b3198720d881f3edcf452"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 30 15:09:51 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 30 18:47:16 2018 -0800"
      },
      "message": "Add `sigset64_t` and accompanying functions.\n\nThis doesn\u0027t address `struct sigaction` and `sigaction`. That will\ncome later.\n\nBug: http://b/72493232\nTest: ran tests\nChange-Id: I4134346757ce3a4dac6feae413361cec16223386\n"
    },
    {
      "commit": "6b9c85b36d2e69b45d780e6a0b27d64909311a7e",
      "tree": "eff21cc7000bc125f5c91f0d90819fd778be371f",
      "parents": [
        "73871ad09be8a8259171d606c4e3e3cf08d4733c"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Jan 23 12:56:18 2018 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Jan 24 16:11:07 2018 -0800"
      },
      "message": "Support priority inheritance mutex in 64bit programs.\n\nBug: http://b/29177606\nTest: run bionic-unit-tests on walleye.\nTest: run bionic-unit-tests-glibc on host.\nChange-Id: Iac349284aa73515f384e7509445f87434757f59e\n"
    },
    {
      "commit": "608b4514cb37170349bc3bf8936f18bdb0d35054",
      "tree": "2bf70158dc1f625b73332bbf569573119fad492c",
      "parents": [
        "c1f6219c32543cb1d6701b13eb53b82abe1e0a12"
      ],
      "author": {
        "name": "Aleksandra Tsvetkova",
        "email": "aleksandra.tsvetkova@intel.com",
        "time": "Fri Feb 27 15:01:59 2015 +0300"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 07 15:44:20 2017 -0800"
      },
      "message": "A few new bionic tests.\n\nTrivial tests for \u003calloca.h\u003e and \u003cbyteswap.h\u003e, plus slightly improved\ntest coverage for \u003cinttypes.h\u003e and \u003cstdlib.h\u003e.\n\nBug: N/A\nTest: ran tests\nChange-Id: Idac4141ffc760c4f7756332477ce5112950d61a5\nSigned-off-by: Aleksandra Tsvetkova \u003caleksandra.tsvetkova@intel.com\u003e\n"
    },
    {
      "commit": "0bd9d135724ce10a2698ebad58a9ceddac63abc3",
      "tree": "2c1aba23341643cfe764a63cf30809bf0549cddf",
      "parents": [
        "46621f43b083d9743545b31e97011a1c44e784b2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 02 13:11:13 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 02 13:11:13 2017 -0700"
      },
      "message": "Fix pthread test race conditions.\n\nGuarantee that threads live long enough for us to fiddle with them.\n\nBug: http://b/68768209\nTest: ran tests\nChange-Id: I06b1bb64fec9f8181b5f5b43ca1030e255fdccc1\n"
    },
    {
      "commit": "7a66066e66710c21f803fc2483c7ffa2f7a6e33a",
      "tree": "918df0f0fd0babd3e06b023cfaf8381df4ddec31",
      "parents": [
        "e379a202504911d228ae07d9ba32c5a02274fe1d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 30 09:26:06 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 30 09:26:06 2017 -0700"
      },
      "message": "Fix pthread.pthread_attr_setinheritsched__PTHREAD_INHERIT_SCHED__PTHREAD_EXPLICIT_SCHED for LP32.\n\nLP32 continues to ignore failures to set scheduler attributes for\nbackwards compatibility with pre-Honeycomb bugs :-(\n\nBug: http://b/68486614\nTest: ran tests (32-bit and 64-bit!)\nChange-Id: I18a012cdf2f3c5bb63a5367bca2bac2de7f53ae2\n"
    },
    {
      "commit": "8aecba7aa6b7f7b92f69c0d3febef59fdb135f87",
      "tree": "fd3d9743a0e282dcbb2a8b2b51906f7da3a84468",
      "parents": [
        "435e6384de8f9e35b8878b1ccda5bb5686c15207"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 17 15:34:41 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 25 14:28:42 2017 -0700"
      },
      "message": "Implement pthread_attr_getinheritsched/pthread_attr_setinheritsched.\n\nHistorically, Android defaulted to EXPLICIT but with a special case\nbecause SCHED_NORMAL/priority 0 was awkward. Because the code couldn\u0027t\nactually tell whether SCHED_NORMAL/priority 0 was a genuine attempt to\nexplicitly set those attributes (because the parent thread is SCHED_FIFO,\nsay) or just because the pthread_attr_t was left at its defaults.\n\nNow we support INHERIT, we could call sched_getscheduler to see whether\nwe actually need to call sched_setscheduler, but since the major cost\nis the fixed syscall overhead, we may as well just conservatively\ncall sched_setscheduler and let the kernel decide whether it\u0027s a\nno-op. (Especially because we\u0027d then have to add both sched_getscheduler\nand sched_setscheduler to any seccomp filter.)\n\nPlatform code (or app code that only needs to support \u003e\u003d P) can actually\nadd a call to pthread_attr_setinheritsched to say that they just want\nto inherit (if they know that none of their threads actually mess with\nscheduler attributes at all), which will save them a sched_setscheduler\ncall except in the doubly-special case of SCHED_RESET_ON_FORK (which we\ndo handle).\n\nAn alternative would be \"make pthread_attr_setschedparams and\npthread_attr_setschedprio set EXPLICIT and change the platform default\nto INHERIT\", but even though I can only think of weird pathological\nexamples where anyone would notice that change, that behavior -- of\npthread_attr_setschedparams/pthread_attr_setschedprio overriding an\nearlier call to pthread_attr_setinheritsched -- isn\u0027t allowed by POSIX\n(whereas defaulting to EXPLICIT is).\n\nIf we have a lot of trouble with this change in the app compatibility\ntesting phase, though, we\u0027ll want to reconsider this decision!\n\n -*-\n\nThis change also removes a comment about setting the scheduler attributes\nin main_thread because we\u0027d have to actually keep them up to date,\nand it\u0027s not clear that doing so would be worth the trouble.\n\nAlso make async_safe_format_log preserve errno so we don\u0027t have to be\nso careful around it.\n\nBug: http://b/67471710\nTest: ran tests\nChange-Id: Idd026c4ce78a536656adcb57aa2e7b2c616eeddf\n"
    },
    {
      "commit": "dff08ced5685a0d1adb0ef875a15caca99556e1e",
      "tree": "9b84626d5a3f8dec14c36ad7a42221b0e11a6f5a",
      "parents": [
        "bf886f621b7c5fb4f690fe182f42640410a32d5c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 16 09:58:45 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 17 09:14:05 2017 -0700"
      },
      "message": "Add pthread_setschedprio.\n\nBug: http://b/26204555\nTest: ran tests\nChange-Id: Ic34062b9b6036a1ce2642a069514bab48a893338\n"
    },
    {
      "commit": "575129886c2db6c7ae1dfd2655d2053166049ad1",
      "tree": "250e5ff69984395749478f1bfa230cce90f95355",
      "parents": [
        "c6021960a4cfe13d5dccdf54daf5a8db343e93d1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 02 22:49:18 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 03 12:20:07 2017 -0700"
      },
      "message": "Pre-size the vector in the pthread_create ENOMEM test.\n\nJust to avoid the possibility of an unfortunate mmap occurring in order to\ngrow the vector.\n\nBug: N/A\nTest: ran tests\nChange-Id: I850740461d761916a0377272664159d010da7b84\n"
    },
    {
      "commit": "53dc9dd70155fd75af744cbebecc563658c69818",
      "tree": "2c115be9ba0a403a6a42d9e880746275313dbd79",
      "parents": [
        "cce6ada00ad055ac52791526e44b1f223bec8ce4"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Sep 19 14:02:50 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Sep 19 14:02:50 2017 -0700"
      },
      "message": "Improve pthread_create failure handling.\n\nReturn EAGAIN rather than aborting if we fail to set up the TLS for a new\nthread.\n\nAdd a test that uses all the VMAs so we can properly test these edge cases.\n\nAdd an explicit test for pthread_attr_setdetachstate, which we use in the\nprevious test, but other than that has no tests.\n\nRemove support for ro.logd.timestamp/persist.logd.timestamp, which doesn\u0027t\nseem to be used, and which prevents us from logging failures in cases where\nmmap fails (because we need to mmap in the system property implementation).\n\nBug: http://b/65608572\nTest: ran tests\nChange-Id: I9009f06546e1c2cc55eff996d08b55eff3482343\n"
    },
    {
      "commit": "d6c678ca90d6f7843a9186515fa38d9eec467ff6",
      "tree": "bb6316d48f1ab523c0520bcba316b2ba232dfa34",
      "parents": [
        "0d5d0746e8b88dab66038d6150cb92b62467aac1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 27 17:01:57 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Sep 18 16:09:43 2017 -0700"
      },
      "message": "Support larger guard regions.\n\nThis also fixes a long-standing bug where the guard region would be taken\nout of the stack itself, rather than being -- as POSIX demands -- additional\nspace after the stack. Historically a 128KiB stack with a 256KiB guard would\nhave given you an immediate crash.\n\nBug: http://b/38413813\nTest: builds, boots\nChange-Id: Idd12a3899be1d92fea3d3e0fa6882ca2216bd79c\n"
    },
    {
      "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"
    }
  ],
  "next": "57b7a6110e7e8b446fc23cce4765ff625ee0a105"
}
