)]}'
{
  "log": [
    {
      "commit": "141b917018048c5fda567785740dfaaf38e66f1e",
      "tree": "144416c96d8e3d1406ed78d8221a72a174317d80",
      "parents": [
        "999d82e51d8b96c622ecb63c69b56e7e7753e47d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 09 17:13:09 2021 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 12 10:01:20 2021 -0700"
      },
      "message": "Switch to libbase SilentDeathTest.\n\nBug: http://b/184955378\nTest: treehugger\nChange-Id: Ie0849224074da92203340a741a86a24a4a3702c2\n"
    },
    {
      "commit": "e657eb4f8abc2bb21571df1c0d0e0cbfaadce1c1",
      "tree": "ece8247ab16072e2fd1fca786be9050562bb3f60",
      "parents": [
        "332065d57e734b65f56474d136d22d767e36cbcd"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 18 17:11:56 2021 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 18 17:23:04 2021 -0800"
      },
      "message": "Fix some bionic death tests.\n\nThese were creating tombstones and spewing to the log.\n\nYou need TEST_F() rather than TEST(), and the modern style is apparently\nto use `using` rather than an empty subclass.\n\nBug: http://b/180605583\nTest: run tests, check logcat\nChange-Id: I1e639d34854aeff6f042c24643b769a6bcfab877\n"
    },
    {
      "commit": "5d3aa86cd1fe2e8b1920003b14b9a0c91153b111",
      "tree": "e17b86fb2a85a913c20d5f91405ef524e7c0c1c8",
      "parents": [
        "4edf74ab1ae2da4bda80d19f4c014e983c74903d"
      ],
      "author": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Fri Sep 11 15:05:17 2020 -0700"
      },
      "committer": {
        "name": "Peter Collingbourne",
        "email": "pcc@google.com",
        "time": "Thu Oct 08 14:02:36 2020 -0700"
      },
      "message": "Add an API for per-process disabling memory initialization.\n\nIntroduce an android_mallopt(M_DISABLE_MEMORY_MITIGATIONS) API call\nthat may be used to disable zero- or pattern-init on non-MTE hardware,\nor memory tagging on MTE hardware. The intent is that this function\nmay be called at any time, including when there are multiple threads\nrunning.\n\nDisabling zero- or pattern-init is quite trivial, we just need to set\na global variable to 0 via a Scudo API call (although there will be\nsome separate work required on the Scudo side to make this operation\nthread-safe).\n\nIt is a bit more tricky to disable MTE across a process, because\nthe kernel does not provide an API for disabling tag checking in all\nthreads in a process, only per-thread. We need to send a signal to each\nof the process\u0027s threads with a handler that issues the required prctl\ncall, and lock thread creation for the duration of the API call to\navoid races between thread enumeration and calls to pthread_create().\n\nBug: 135772972\nChange-Id: I81ece86ace916eb6b435ab516cd431ec4b48a3bf\n"
    },
    {
      "commit": "b4f7aaac5cdda45ff0d9dc58e1fd2d727601f619",
      "tree": "076085acae14debf227f485292a48f1965f89be1",
      "parents": [
        "b56d1182d1067e70910584cf0c8fd797a262d82a"
      ],
      "author": {
        "name": "Evgeny Eltsin",
        "email": "eaeltsin@google.com",
        "time": "Tue Jun 09 15:49:20 2020 +0200"
      },
      "committer": {
        "name": "Evgeny Eltsin",
        "email": "eaeltsin@google.com",
        "time": "Tue Jun 09 15:58:49 2020 +0200"
      },
      "message": "Skip pthread.pthread_create__mmap_failures with native_bridge\n\nThe test reserves all memory but the minimum required to create a\nthread. However, after the thread is created, native_bridge needs more\nmemory to translate and run the thread function.\n\nThis might be prevented by native_bridge preallocating a memory buffer\nto be used for translation. But, first, this complication seems to be\nneeded just for this kind of tests, and, second, it is pretty flaky\nregarding changes both in native_bridge and bionic.\n\nLooks better to disable this test with native_bridge.\n\nBug: 67745607\nBug: 148608153\nBug: 157394871\nTest: bionic-unit-tests --gtest_filter\u003dpthread.pthread_create__mmap_failures\nChange-Id: I42ce2b5a01a7d9f10d952a5fc7b75d51fa89072a\n"
    },
    {
      "commit": "800c1a97079c22d0c0d5dd35168916a298e5cd86",
      "tree": "053b71b7b926464cc2d04b0dd397139d79394476",
      "parents": [
        "59cc0b314205c905645dbf75b57a1b944ca9673a"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Jul 17 10:45:18 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Jul 17 10:46:47 2019 -0700"
      },
      "message": "Fix pthread_cond_clockwait() when cond is initialized with CLOCK_MONOTONIC\n\nA bit of over-reliance on implementing pthread_cond_clockwait() in\nterms of existing functions ended up with a bug that if the condition\nvariable was initialized to use CLOCK_MONOTONIC, then\npthread_cond_clockwait() would do the wrong thing.\n\nThis change corrects that and adds a test for this case.\n\nTest: new and existing tests pthread_cond unit tests\nChange-Id: I708d5dfbef95a67678db56dceda011f2f8fd1c5c\n"
    },
    {
      "commit": "69010802d037dbc10377416bd9cc696fa34b9384",
      "tree": "cfe3d6b0d956daf3e68ee542bb8d855604d433c7",
      "parents": [
        "c80af7f146df928dadee254467d6f0fc4401585f"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue May 07 20:33:05 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Jul 15 09:06:19 2019 -0700"
      },
      "message": "Implement new clock wait functions\n\npthread_cond_clockwait\npthread_mutex_clocklock\npthread_rwlock_clockrdlock\npthread_rwlock_clockwrlock\nsem_clockwait\n\nBug: 35756266\nTest: new unit tests\nChange-Id: I71bd25eeec6476134b368d5bdf2f729d0bba595e\n"
    },
    {
      "commit": "4b6c0f5dce5ad8d93e4e707977e09153a5399139",
      "tree": "a6cb5df96d21f0aca90c12b5fba1ee172cd3b62d",
      "parents": [
        "9586c0f4f421e63342074eeae9806cf11d622703"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Apr 18 22:47:04 2019 -0700"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Apr 19 17:16:16 2019 -0700"
      },
      "message": "PIMutexUnlock: load owner_tid in non-common case\n\nFor a recursive or errorcheck PI mutex, the old_owner variable wasn\u0027t\nbeing initialized. As a result, unlocking a doubly-locked recursive\nmutex owned by another thread decremented the mutex counter. Instead, the\nunlock call should fail with EPERM.\n\nBug: http://b/130841532\nTest: bionic-unit-tests\nTest: bionic-unit-tests-glibc --gtest_filter\u003d\u0027pthread.pthread_mutex_lock*\u0027\nChange-Id: I37adb094cb2ce8d51df7b4f48e8d6bc144436418\n"
    },
    {
      "commit": "bcaa454d32e1b4ccf92467bb263d627695ac9a5b",
      "tree": "65d7d4c493242ecb51bfe1796f133b32538de514",
      "parents": [
        "ff16c0b89b7297bc70353f60afac9bb93d6b0087"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 08 15:20:23 2019 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 12 10:26:39 2019 -0700"
      },
      "message": "bionic tests: use GTEST_SKIP.\n\nAlso be a bit more to the point in our messages, focusing on \"why\" not\n\"what\".\n\nTest: ran tests\nChange-Id: I297806c7a102bd52602dcd2fcf7a2cd34aba3a11\n"
    },
    {
      "commit": "f827d82cdde0fe7f11015fb5ead39bac861ab6bd",
      "tree": "a322a9f7b880e20144916208388ed2540fd60c9e",
      "parents": [
        "73ee7a6320024c8f390d954a01b7a067c919bfc4",
        "7cc670637005e88e00be467c6c387112644a9209"
      ],
      "author": {
        "name": "Evgenii Stepanov",
        "email": "eugenis@google.com",
        "time": "Wed Feb 06 22:04:09 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Feb 06 22:04:09 2019 +0000"
      },
      "message": "Merge \"Cleanup bionic tests with hwasan.\""
    },
    {
      "commit": "7cc670637005e88e00be467c6c387112644a9209",
      "tree": "0141df753769639688cc216287be3f7f76d5cbdf",
      "parents": [
        "352853a53525ecb2a120dfa4e9aa03b3970df8ee"
      ],
      "author": {
        "name": "Evgenii Stepanov",
        "email": "eugenis@google.com",
        "time": "Tue Feb 05 18:43:34 2019 -0800"
      },
      "committer": {
        "name": "Evgenii Stepanov",
        "email": "eugenis@google.com",
        "time": "Wed Feb 06 13:59:16 2019 -0800"
      },
      "message": "Cleanup bionic tests with hwasan.\n\nThe tests were patched earlier to run with tagging heap allocator.\nThis change enables hwasan code instrumentation in the tests themselves,\nand fixes the issues that arise, mainly in the code that:\n* compares addresses of unrelated stack variables\n* compares address of a stack variable with stack limits as found in\n  /proc/self/maps\n* writes address of a stack variable to a hardware watchpoint register\netc.\n\nNote that static tests are broken at the moment, like all static\nbinaries. Dynamic tests pass 100% with this change.\n\nBug: 114279110, 124007027\nTest: SANITIZE_TARGET\u003dhwaddress; run dynamic bionic tests\n\nChange-Id: I68b8df9dd3e30b47734ddc083811a75a7f27deaa\n"
    },
    {
      "commit": "3f8bdb216cf3c1faab805917efed74119971f84d",
      "tree": "9a4c0cdc4d65c56cefb1e00152129e3e560cb2c6",
      "parents": [
        "9a5c0fc9d3ec59f4a64b86f835745b9695ee9e43",
        "352853a53525ecb2a120dfa4e9aa03b3970df8ee"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Feb 06 16:42:47 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Feb 06 16:42:47 2019 +0000"
      },
      "message": "Merge \"Fix use-after-pthread_exit in a test.\""
    },
    {
      "commit": "352853a53525ecb2a120dfa4e9aa03b3970df8ee",
      "tree": "b70292ae9c4cf2945228126b893bf8d0596fb863",
      "parents": [
        "de70b72b4f408a7100000e632e9b887347a531b3"
      ],
      "author": {
        "name": "Evgenii Stepanov",
        "email": "eugenis@google.com",
        "time": "Tue Feb 05 17:37:37 2019 -0800"
      },
      "committer": {
        "name": "Evgenii Stepanov",
        "email": "eugenis@google.com",
        "time": "Tue Feb 05 17:37:37 2019 -0800"
      },
      "message": "Fix use-after-pthread_exit in a test.\n\nHWASan reports access to a local variable after the owning thread has\ncalled pthread_exit.\n\nBug: 114279110\nTest: enable hwasan in tests/Android.bp; run pthread_DeathTest.pthread_bug_37410\nChange-Id: Ic04a2b3dce092d7ab3cbefab1da64731e0c7afb9\n"
    },
    {
      "commit": "5bb113cba279f93fb840954463e897b9e28a8660",
      "tree": "bb0ef349f69afba98ee358d5b21a77aeab59076b",
      "parents": [
        "58dd1cbd7f2a0b8a779f2f43c45447cdccc09c3e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 01 16:31:10 2019 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 01 16:31:10 2019 -0800"
      },
      "message": "Pass caller names to __pthread_internal_find for better errors.\n\nOn http://b/122082295 we had this abort:\n\n  12-27 15:29:31.237 10222 10814 10848 F libc    : invalid pthread_t 0xb1907960 passed to libc\n\nThis wasn\u0027t super helpful. We can do better. Now you get something like\nthis instead:\n\n  03-27 02:34:58.754 25329 25329 W libc    : invalid pthread_t (0) passed to pthread_join\n\nTest: adb shell crasher\nBug: http://b/123255692\nChange-Id: I1d545665a233308480cc3747ec3120e2b6de0453\n"
    },
    {
      "commit": "08fd072525b682ff3c23207c179506d886f70556",
      "tree": "9229e78cc2252a8659129938145f6e547c937dc3",
      "parents": [
        "b21fc16a22cec7056a5231568e1eac636c115b19"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Tue Jan 15 19:00:11 2019 -0800"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Tue Jan 15 19:00:11 2019 -0800"
      },
      "message": "bionic: update for glibc 2.17\n\nComing soon to a source tree near you.\n\nBug: 111358231\nTest: `m checkbuild`. x86 emulator boots cleanly.\nChange-Id: I9e3e2f7d3f8b7c36798fad27ca776f3490d834d2\n"
    },
    {
      "commit": "45d1349c638426d99a5319e7be3dbb7c36ece7eb",
      "tree": "fe566eac57d2354c8b6bf27fc9db698fe57ea6be",
      "parents": [
        "27d59338b98bba7f33eb223c4f2e1df4c3b96774"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Thu Jan 03 02:51:30 2019 -0800"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Jan 11 15:34:22 2019 -0800"
      },
      "message": "Reorganize static TLS memory for ELF TLS\n\nFor ELF TLS \"local-exec\" accesses, the static linker assumes that an\nexecutable\u0027s TLS segment is located at a statically-known offset from the\nthread pointer (i.e. \"variant 1\" for ARM and \"variant 2\" for x86).\nBecause these layouts are incompatible, Bionic generally needs to allocate\nits TLS slots differently between different architectures.\n\nTo allow per-architecture TLS slots:\n - Replace the TLS_SLOT_xxx enumerators with macros. New ARM slots are\n   generally negative, while new x86 slots are generally positive.\n - Define a bionic_tcb struct that provides two things:\n    - a void* raw_slots_storage[BIONIC_TLS_SLOTS] field\n    - an inline accessor function: void*\u0026 tls_slot(size_t tpindex);\n\nFor ELF TLS, it\u0027s necessary to allocate a temporary TCB (i.e. TLS slots),\nbecause the runtime linker doesn\u0027t know how large the static TLS area is\nuntil after it has loaded all of the initial solibs.\n\nTo accommodate Golang, it\u0027s necessary to allocate the pthread keys at a\nfixed, small, positive offset from the thread pointer.\n\nThis CL moves the pthread keys into bionic_tls, then allocates a single\nmapping per thread that looks like so:\n - stack guard\n - stack [omitted for main thread and with pthread_attr_setstack]\n - static TLS:\n    - bionic_tcb [exec TLS will either precede or succeed the TCB]\n    - bionic_tls [prefixed by the pthread keys]\n    - [solib TLS segments will be placed here]\n - guard page\n\nAs before, if the new mapping includes a stack, the pthread_internal_t\nis allocated on it.\n\nAt startup, Bionic allocates a temporary bionic_tcb object on the stack,\nthen allocates a temporary bionic_tls object using mmap. This mmap is\ndelayed because the linker can\u0027t currently call async_safe_fatal() before\nrelocating itself.\n\nLater, Bionic allocates a stack-less thread mapping for the main thread,\nand copies slots from the temporary TCB to the new TCB.\n(See *::copy_from_bootstrap methods.)\n\nBug: http://b/78026329\nTest: bionic unit tests\nTest: verify that a Golang app still works\nTest: verify that a Golang app crashes if bionic_{tls,tcb} are swapped\nMerged-In: I6543063752f4ec8ef6dc9c7f2a06ce2a18fc5af3\nChange-Id: I6543063752f4ec8ef6dc9c7f2a06ce2a18fc5af3\n(cherry picked from commit 1e660b70da625fcbf1e43dfae09b7b4817fa1660)\n"
    },
    {
      "commit": "5e62b34c0d6fa545b487b9b64fb4a04a0589bc13",
      "tree": "e08ee44067b3b636ace11b21ec8d63a08d4d2a19",
      "parents": [
        "c89a3971e94c30611c885e4c440eae2fd9937948"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 25 11:00:00 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 25 11:00:00 2018 -0700"
      },
      "message": "Clean up bionic_macros.h a bit.\n\nUse \u003candroid-base/macros.h\u003e instead where possible, and move the bionic\nmacros out of the way of the libbase ones. Yes, there are folks who manage\nto end up with both included at once (thanks OpenGL!), and cleaning that\nup doesn\u0027t seem nearly as practical as just making this change.\n\nBug: N/A\nTest: builds\nChange-Id: I23fc544f39d5addf81dc61471771a5438778895b\n"
    },
    {
      "commit": "ddf757e35eb36d684b16273f0ddfe2d387983e8e",
      "tree": "411e728f73fa9e3b5c1fc8b065823d68cae94307",
      "parents": [
        "773c697f815d43182adf1eb430f4899255088d6b"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Oct 17 15:23:03 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Oct 17 17:35:56 2018 -0700"
      },
      "message": "Properly fail with ESRCH when pthread_killing an exited thread.\n\nPreviously, we were callign tgkill(pid, 0, signal) instead, which would\nfail with EINVAL instead.\n\nTest: bionic-unit-tests\nChange-Id: I25b127dcf347e0223274502b0516a950b6c2093e\n"
    },
    {
      "commit": "32bc0fcf69dfccb3726fe572833a38b01179580e",
      "tree": "abca656f500087493e0997d5cf38cbcc9ec98eb8",
      "parents": [
        "65f82092a17518080178ff7004cc6db362ebfbcd"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Thu Aug 02 17:31:13 2018 -0700"
      },
      "committer": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Thu Aug 02 18:09:44 2018 -0700"
      },
      "message": "Modernize codebase by replacing NULL with nullptr\n\nFixes -Wzero-as-null-pointer-constant warning.\n\nTest: m\nBug: 68236239\nChange-Id: I5b4123bc6709641315120a191e36cc57541349b2\n"
    },
    {
      "commit": "463faada00c10e3a4b86b9dc4fff534526be26cb",
      "tree": "363cb5e526029a6c06c2b3a1479c3af6466f1d22",
      "parents": [
        "50acae8f2ae017c49b1d616e93ce9f97f6b3d118"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 06 14:34:49 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 06 14:34:49 2018 -0700"
      },
      "message": "pthread_barrier_init: add a test for the count \u003d\u003d 0 EINVAL case.\n\nThe code was already correct, but we didn\u0027t have a test.\n\nBug: N/A\nTest: ran tests\nChange-Id: Ie63cbcfbfc2f2df6270aae98f0f4add484d210bc\n"
    },
    {
      "commit": "c6b5bcd182edef34f058827882b1908f890cc4cd",
      "tree": "63b9b787f9434c2424f0c2957eb8ce668cb9bd69",
      "parents": [
        "0bc4772ee5e9cbf772227732135fd13e125571a9"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Mar 05 14:14:44 2018 -0800"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Mar 20 18:41:22 2018 -0700"
      },
      "message": "Add _monotonic_np versions of timed wait functions\n\nAs a follow up to Ibba98f5d88be1c306d14e9b9366302ecbef6d534, where we\nadded a work around to convert the CLOCK_REALTIME timeouts to\nCLOCK_MONOTONIC for pthread and semaphore timed wait functions, we\u0027re\nintroducing a set of _monotonic_np versions of each of these functions\nthat wait on CLOCK_MONOTONIC directly.\n\nThe primary motivation here is that while the above work around helps\nfor 3rd party code, it creates a dilemma when implementing new code\nthat would use these functions: either one implements code with these\nfunctions knowing there is a race condition possible or one avoids\nthese functions and reinvent their own waiting/signaling mechanisms.\nNeither are satisfactory, so we create a third option to use these\nAndroid specific _monotonic_np functions that completely remove the\nrace condition while keeping the rest of the interface.\n\nSpecifically this adds the below functions:\npthread_mutex_timedlock_monotonic_np()\npthread_cond_timedwait_monotonic_np()\npthread_rwlock_timedrdlock_monotonic_np()\npthread_rwlock_timedwrlock_monotonic_np()\nsem_timedwait_monotonic_np()\n\nNote that pthread_cond_timedwait_monotonic_np() previously existed and\nwas removed since it\u0027s possible to initialize a condition variable to\nuse CLOCK_MONOTONIC.  It is added back for a mix of reasons,\n1) Symmetry with the rest of the functions we\u0027re adding\n2) libc++ cannot easily take advantage of the new initializer, but\n   will be able to use this function in order to wait on\n   std::steady_clock\n3) Frankly, it\u0027s a better API to specify the clock in the waiter function\n   than to specify the clock when the condition variable is\n   initialized.\n\nBug: 73951740\nTest: new unit tests\nChange-Id: I23aa5c204e36a194237d41e064c5c8ccaa4204e3\n"
    },
    {
      "commit": "9651fdf93ae2c33fa38a6c5c5005b8596e716789",
      "tree": "e0e9554bd1e79d1232aa1055562b48c1031841a7",
      "parents": [
        "35e620cf98d133ba6e40f7713c858c40bb825a4b"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Mar 14 12:02:21 2018 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Mar 15 10:44:30 2018 -0700"
      },
      "message": "Check using destroyed mutexes.\n\nFor apps built for Android \u003c P, return EBUSY.\nFor apps built for Android \u003e\u003d P, abort.\n\nThis is to keep old apps work, and help debugging\napps built for \u003e\u003d P.\n\nBug: http://b/74632097\nTest: run bionic-unit-tests.\nTest: run bionic-benchmark.\n\nChange-Id: I5271565a1a6ad12678f85d558a7f862a2b7aab4b\n"
    },
    {
      "commit": "71ba5899ae5857a6510f0fa05039dccee73bcc6a",
      "tree": "9d34769766ce10c95ecb32bc5ec25949007a0048",
      "parents": [
        "0a8d5f3eb8f4087b307f237943a19ae36b094ced"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 07 12:44:45 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 05 17:20:12 2018 -0800"
      },
      "message": "Rewrite system(3) to use posix_spawn(3).\n\nWe saw crashes from pthread_exit+debuggerd on LP32\n(https://issuetracker.google.com/72291624), and it seems like the\nequivalent problem should exist with system(3). I fixed posix_spawn(3)\nas part of that bug, so the easiest fix is probably to reuse that.\n\nBug: http://b/72470344\nTest: ran tests\nChange-Id: I05f838706f2b4a14ac3ee21292833e6c8579b0d4\n"
    },
    {
      "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"
    }
  ],
  "next": "32651b8e8e453391c7aaca47cd885e94d54d0bf4"
}
