)]}'
{
  "log": [
    {
      "commit": "40a521744825b6060960c296d5fb3da4c6593d94",
      "tree": "b9736886f5ca89daf4bf6cca05e090315a006dcd",
      "parents": [
        "4ad5066e1de326e5db46df18eeade9a88bc11bec"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 30 14:48:10 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 30 14:49:40 2014 -0700"
      },
      "message": "Only wipe TLS for user-supplied stacks.\n\nBug: 16667988\nChange-Id: Id180ab2bc6713e1612386120a306db5bbf1d6046\n"
    },
    {
      "commit": "e959a3b3157e38ebda4ce6f86efb5644faa4988b",
      "tree": "3e8e0aec84c044d4471cf76b0348aaccce7df1f8",
      "parents": [
        "cd23370ca737dffc49166f8aacd19a025e72266f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 10 10:25:26 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 10 10:25:26 2014 -0700"
      },
      "message": "Remove the global lock around thread stack creation.\n\nThis lock has been here since the original commits, but as far as I can tell\nit never served any purpose. We\u0027ve never had a free list of cached stacks or\nanything like that.\n\nChange-Id: I9d665c7eaa9c699ce0659ffb111402a0239fe1f5\n"
    },
    {
      "commit": "e0f25dda3f38a70e5689e785597c5cf2b68bdcf8",
      "tree": "bacde97e2513770b1d9c9bfe76792f1e7c0d7d57",
      "parents": [
        "d028b6209cde7929e6d0613cbd92cc7b766d3d09"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 09 22:13:55 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 09 22:13:55 2014 -0700"
      },
      "message": "Remove the obsolete _thread_created_hook.\n\ngdb won\u0027t even try to use this on Android because it knows we don\u0027t\nsupport old enough kernels to need it.\n\nBug: 15470251\nChange-Id: Ia6d54585d888bbab8ee0490a148a1586b25437b9\n"
    },
    {
      "commit": "7086ad6919feb2415c6027163f5c63323bcca27c",
      "tree": "f32c06d513e90ba1fcb8fe56f9cd055cccc7d01b",
      "parents": [
        "d1bf37780d0bcaca3e6046171f958ebfea34bde1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 19 16:39:01 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 20 09:06:57 2014 -0700"
      },
      "message": "Cache getpid.\n\nIn practice, with this implementation we never need to make a system call.\nWe get the main thread\u0027s tid (which is the same as our pid) back from\nthe set_tid_address system call we have to make during initialization.\nA new pthread will have the same pid as its parent, and a fork child\u0027s\nmain (and only) thread will have a pid equal to its tid, which we get for\nfree from the kernel before clone returns.\n\nThe only time we\u0027d actually have to make a getpid system call now is if\nwe take a signal during fork and the signal handler calls getpid. (That,\nor we call getpid in the dynamic linker while it\u0027s still dealing with its\nown relocations and hasn\u0027t even set up the main thread yet.)\n\nBug: 15387103\nChange-Id: I6d4718ed0a5c912fc75b5f738c49a023dbed5189\n"
    },
    {
      "commit": "03eebcb6e8762e668a0d3af6bb303cccb88c5b81",
      "tree": "3c5053d90eb3d1fac8c21fa390367a911e188191",
      "parents": [
        "64dfbd242cddc3ef95576e27e3940d68b89b5fce"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jun 13 13:57:51 2014 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jun 18 14:23:46 2014 -0700"
      },
      "message": "Move common macros into bionic_macros.h.\n\nBug: 15590152\nChange-Id: I730636613ef3653f68c5ab1d43b53beaf8e0dc25\n"
    },
    {
      "commit": "b30aff405a220495941f1673b0a5e66c4fa8b84c",
      "tree": "3bf667c009cf468c040ccaae6e81d468b4fd0254",
      "parents": [
        "52f74322b1d72d57146107f32ee2c76c421bf4b1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 28 19:35:33 2014 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 28 18:31:15 2014 -0700"
      },
      "message": "Revert \"Revert \"Lose the hand-written futex assembler.\"\"\n\nThe problem with the original patch was that using syscall(3) means that\nerrno can be set, but pthread_create(3) was abusing the TLS errno slot as\na pthread_mutex_t for the thread startup handshake.\n\nThere was also a mistake in the check for syscall failures --- it should\nhave checked against -1 instead of 0 (not just because that\u0027s the default\nidiom, but also here because futex(2) can legitimately return values \u003e 0).\n\nThis patch stops abusing the TLS errno slot and adds a pthread_mutex_t to\npthread_internal_t instead. (Note that for LP64 sizeof(pthread_mutex_t) \u003e\nsizeof(uintptr_t), so we could potentially clobber other TLS slots too.)\n\nI\u0027ve also rewritten the LP32 compatibility stubs to directly reuse the\ncode from the .h file.\n\nThis reverts commit 75c55ff84ebfa686c7ae2cc8ee431c6a33bd46b4.\n\nBug: 15195455\nChange-Id: I6ffb13e5cf6a35d8f59f692d94192aae9ab4593d\n"
    },
    {
      "commit": "cd46104cf81aef14f9554bb4d9bced534a121471",
      "tree": "cc26d6481805b1d4d96089d57020976daa0b662d",
      "parents": [
        "15c13bd6cc0ce44d8f083f75d0bfa926a88cc169"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 14 10:58:58 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 14 10:58:58 2014 -0700"
      },
      "message": "Fix a typo in the big g_ search/replace.\n\nChange-Id: I79261de70d225236d0eadff288220258d697437f\n"
    },
    {
      "commit": "1728b2396591853345507a063ed6075dfd251706",
      "tree": "7083cd234073afa5179b94b3d978550c890af90c",
      "parents": [
        "bac795586bbc5dcbe886d8d781710f60c4c19d9b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 14 10:02:03 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 14 10:02:03 2014 -0700"
      },
      "message": "Switch to g_ for globals.\n\nThat\u0027s what the Google style guide recommends, and we\u0027re starting\nto get a mix.\n\nChange-Id: Ib0c53a890bb5deed5c679e887541a715faea91fc\n"
    },
    {
      "commit": "0d236aa3f1e6d31b0c729448ae9d3ed1cad23fb4",
      "tree": "1370d62648bdbe2be69259ed593274d23851c8c6",
      "parents": [
        "8fa5c2528c04df00f9f9a3dc4047ae88d3f13524"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 09 14:42:16 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 09 17:06:51 2014 -0700"
      },
      "message": "Align the child stack in clone(2).\n\nAlso let clone(2) set the TLS for x86.\n\nAlso ensure we initialize the TLS before we clone(2) for all architectures.\n\nChange-Id: Ie5fa4466e1c9ee116a281dfedef574c5ba60c0b5\n"
    },
    {
      "commit": "b676aafad04f88e36658d4468054375158dbd3c1",
      "tree": "ba44c6f2c480d3078c2c7b5508f39848009af668",
      "parents": [
        "b64868a50715cfdb5c71d97144ba00acf78e2a76"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 10 17:50:06 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 10 17:50:06 2014 -0700"
      },
      "message": "Remove unnecessary #includes.\n\nChange-Id: Ie7e0c9ea03f35517c7dcf09fc808c12e55262bc1\n"
    },
    {
      "commit": "f2cea021ab2c6d7d7feeb40cca098aa132605876",
      "tree": "119daf06820264a62bf3290bbbf8839dcb0196e3",
      "parents": [
        "6ece7fc33a389ef9bcbe78a83a6633e4cb4e4743"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 13 14:54:53 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 13 14:54:53 2014 -0700"
      },
      "message": "Clean up \u003cstdio.h\u003e macros.\n\nAlso neuter __isthreaded.\n\nWe should come back to try to hide struct FILE\u0027s internals for LP64.\n\nBug: 3453512\nBug: 3453550\nChange-Id: I7e115329fb4579246a72fea367b9fc8cb6055d18\n"
    },
    {
      "commit": "af8aebebb52d73ea38c604525a6a5857618861cf",
      "tree": "b38fcd81c0a7b3c06f50767a571243d5b4fcc6fa",
      "parents": [
        "d971f7290529310df6f8d4ba8b3a30f629ba2946"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 14 17:16:18 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 14 17:16:18 2014 -0800"
      },
      "message": "Move _thread_created_hook to where it belongs.\n\nChange-Id: I643d761c78ccaae25270aeffa2afb811c4e2fcd7\n"
    },
    {
      "commit": "80906141f79be8be63fc915bfab467029b442ca1",
      "tree": "791a682ab1dcb29efd3eeeac1f8eb3af0144466c",
      "parents": [
        "1c057607d89229f5effaf1acf2ecde24ece41389"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 26 13:57:21 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 26 13:57:21 2013 -0800"
      },
      "message": "Work around CLONE_SETTLS being weird on x86.\n\nUnlike other architectures, on x86 (but not x86-64), CLONE_SETTLS\ntakes a pointer to a struct user_desc instead of a pointer to the\nTLS itself. Rather than have to deal with this here, let\u0027s just use\nthe old __set_tls mechanism we used to use (and still use for the\nmain thread on all architectures, so it\u0027s not going away any time\nsoon).\n\nBug: 11826724\nChange-Id: I02a27939a73ae6cea1134a3f4c1dd7eafea479da\n"
    },
    {
      "commit": "cef3faec0ea40fdfe58e425fd0be64f00de6a26d",
      "tree": "1f33cbb2de225d0d76d3eb53ef8857b9ecc79bbe",
      "parents": [
        "1b2d214b62ad7bf46f37c79442a69d930aa29027"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 19 16:52:24 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 19 17:22:22 2013 -0800"
      },
      "message": "Clean up pthread_internal_t.\n\nBug: 11755300\nChange-Id: Ib509e8c5ec6b23513aa78b5ac5141d7c34ce2dc8\n"
    },
    {
      "commit": "877ec6d90418ff1d6597147d355a2229fdffae7e",
      "tree": "e475221a7fbff1564ad37548e920333c49cc5873",
      "parents": [
        "f246c589d66e5dc0e3cddc3c37261fb0e3fc67e9"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 15 17:40:18 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 18 19:48:11 2013 -0800"
      },
      "message": "Fix pthread_join.\n\nLet the kernel keep pthread_internal_t::tid updated, including\nacross forks and for the main thread. This then lets us fix\npthread_join to only return after the thread has really exited.\n\nAlso fix the thread attributes of the main thread so we don\u0027t\nunmap the main thread\u0027s stack (which is really owned by the\ndynamic linker and contains things like environment variables),\nwhich fixes crashes when joining with an exited main thread\nand also fixes problems reported publicly with accessing environment\nvariables after the main thread exits (for which I\u0027ve added a new\nunit test).\n\nIn passing I also fixed a bug where if the clone(2) inside\npthread_create(3) fails, we\u0027d unmap the child\u0027s stack and TLS (which\ncontains the mutex) and then try to unlock the mutex. Boom! It wasn\u0027t\nuntil after I\u0027d uploaded the fix for this that I came across a new\npublic bug reporting this exact failure.\n\nBug: 8206355\nBug: 11693195\nBug: https://code.google.com/p/android/issues/detail?id\u003d57421\nBug: https://code.google.com/p/android/issues/detail?id\u003d62392\nChange-Id: I2af9cf6e8ae510a67256ad93cad891794ed0580b\n"
    },
    {
      "commit": "e48b68570d872ef7ece1d873c0ea298ea76393f3",
      "tree": "8c6d8721af2bfddd2c649a0d887a4a905358da04",
      "parents": [
        "e39e3a77d6e8cf681718a572bc754fd64dfc87ff"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 15 14:57:45 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 15 14:57:45 2013 -0800"
      },
      "message": "Clean up the pthread_create trampoline.\n\nBug: 8206355\nBug: 11693195\nChange-Id: I35cc024d5b6ebd19d1d2e45610db185addaf45df\n"
    },
    {
      "commit": "70b24b1cc2a1a4436b1fea3f8b76616fdcb27224",
      "tree": "70c8e04ccd256eaeda3c7e516776f4c9bca25628",
      "parents": [
        "05ec00bf62ac168c9787a3d0640879ab3e502fe5"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 15 11:51:07 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 15 14:41:19 2013 -0800"
      },
      "message": "Switch pthread_create over to __bionic_clone.\n\nBug: 8206355\nBug: 11693195\nChange-Id: I04aadbc36c87e1b7e33324b9a930a1e441fbfed6\n"
    },
    {
      "commit": "c3f114037dbf028896310609fd28cf2b3da99c4d",
      "tree": "e463aeb3604177cd93cea8a58936a8dce4b34ee5",
      "parents": [
        "d0d0b52da375bfa85947a4257198791f615f18a8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 30 14:40:09 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 31 12:31:16 2013 -0700"
      },
      "message": "\u003cpthread.h\u003e fixes and pthread cleanup.\n\n\u003cpthread.h\u003e was missing nonnull attributes, noreturn on pthread_exit,\nand had incorrect cv qualifiers for several standard functions.\n\nI\u0027ve also marked the non-standard stuff (where I count glibc rather\nthan POSIX as \"standard\") so we can revisit this cruft for LP64 and\ntry to ensure we\u0027re compatible with glibc.\n\nI\u0027ve also broken out the pthread_cond* functions into a new file.\n\nI\u0027ve made the remaining pthread files (plus ptrace) part of the bionic code\nand fixed all the warnings.\n\nI\u0027ve added a few more smoke tests for chunks of untested pthread functionality.\n\nWe no longer need the libc_static_common_src_files hack for any of the\npthread implementation because we long since stripped out the rest of\nthe armv5 support, and this hack was just to ensure that __get_tls in libc.a\nwent via the kernel if necessary.\n\nThis patch also finishes the job of breaking up the pthread.c monolith, and\nadds a handful of new tests.\n\nChange-Id: Idc0ae7f5d8aa65989598acd4c01a874fe21582c7\n"
    },
    {
      "commit": "2b6e43e00ece68b3aba26d8f95f07cd9d9294ab4",
      "tree": "7a27d206fb0f2ef7b702c0c785827d607dd7216a",
      "parents": [
        "8e6e7cdadbb4efdeefaa73fe94f7a9a1722745a7"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 29 16:11:06 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 29 16:11:06 2013 -0700"
      },
      "message": "Explain the sigprocmask in pthread_exit.\n\nAlso remove the SIGSEGV special case, which was probably because\nhand-written __exit_with_stack_teardown stubs used to try to cause\nSIGSEGV if the exit system call returned (which it never does, so\nthat dead code disappeared).\n\nAlso move the sigprocmask into the only case where it\u0027s necessary ---\nthe one where we unmap the stack that would be used by a signal\nhandler.\n\nChange-Id: Ie40d20c1ae2f5e7125131b6b492cba7a2c6d08e9\n"
    },
    {
      "commit": "98624c374646a050556bdc402b55b792fefa7e55",
      "tree": "a55bf0e44ee1613a4e0765482c77e5eb16368ac2",
      "parents": [
        "dc9d8d050a43e1cd32f1337e79187124bb15d938"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 15 16:51:17 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 15 16:51:17 2013 -0700"
      },
      "message": "Make pthread_create report sched_setscheduler failures on LP64.\n\nWe couldn\u0027t fix this for 32-bit because there\u0027s too much broken\ncode out there. (Pretty much everyone asks for real-time\nscheduling for all their threads, and the kernel says \"don\u0027t be\nstupid\".)\n\nChange-Id: I43c5271e6b6bb91278b9a19eec08cbf05391e3c4\n"
    },
    {
      "commit": "eb847bc8666842a3cfc9c06e8458ad1abebebaf0",
      "tree": "15e070fb706ba7599d5f402a8f934a7399541a6a",
      "parents": [
        "0c17099a71cb5d1b36b7aab66fd7341b3fc9106d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 09 15:50:50 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 09 16:00:17 2013 -0700"
      },
      "message": "Fix x86_64 build, clean up intermediate libraries.\n\nThe x86_64 build was failing because clone.S had a call to __thread_entry which\nwas being added to a different intermediate .a on the way to making libc.so,\nand the linker couldn\u0027t guarantee statically that such a relocation would be\npossible.\n\n  ld: error: out/target/product/generic_x86_64/obj/STATIC_LIBRARIES/libc_common_intermediates/libc_common.a(clone.o): requires dynamic R_X86_64_PC32 reloc against \u0027__thread_entry\u0027 which may overflow at runtime; recompile with -fPIC\n\nThis patch addresses that by ensuring that the caller and callee end up in the\nsame intermediate .a. While I\u0027m here, I\u0027ve tried to clean up some of the mess\nthat led to this situation too. In particular, this removes libc/private/ from\nthe default include path (except for the DNS code), and splits out the DNS\ncode into its own library (since it\u0027s a weird special case of upstream NetBSD\ncode that\u0027s diverged so heavily it\u0027s unlikely ever to get back in sync).\n\nThere\u0027s more cleanup of the DNS situation possible, but this is definitely a\nstep in the right direction, and it\u0027s more than enough to get x86_64 building\ncleanly.\n\nChange-Id: I00425a7245b7a2573df16cc38798187d0729e7c4\n"
    },
    {
      "commit": "2a0b873065edb304fa2d1c54f8de663ea638b8ab",
      "tree": "4753b74b87e713379965bb051482036e6726afb1",
      "parents": [
        "777a4ee6771e6fe3362ef4f24244a44fcd0aabe4"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 08 18:50:24 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 09 13:39:13 2013 -0700"
      },
      "message": "Fix __errno for LP64 and clean up __get_tls.\n\nIf __get_tls has the right type, a lot of confusing casting can disappear.\n\nIt was probably a mistake that __get_tls was exposed as a function for mips\nand x86 (but not arm), so let\u0027s (a) ensure that the __get_tls function\nalways matches the macro, (b) that we have the function for arm too, and\n(c) that we don\u0027t have the function for any 64-bit architecture.\n\nChange-Id: Ie9cb989b66e2006524ad7733eb6e1a65055463be\n"
    },
    {
      "commit": "84114c8dd5b17efecf7988f263ce431208d7be5a",
      "tree": "81d4ae4e6a40c4255b2e76adeb2b68dab5932058",
      "parents": [
        "40e7a87864fee75f7af2caf8e1972d0d764135cd"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 17 13:33:19 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 17 13:33:19 2013 -0700"
      },
      "message": "Improve stack overflow diagnostics (take 2).\n\nThis reverts commits eb1b07469f2b5a392dc1bfd8adc211aea8c72bc5 and\nd14dc3b87fbf80553f1cafa453816b7f11366627, and fixes the bug where\nwe were calling mmap (which might cause errno to be set) before\n__set_tls (which is required to implement errno).\n\nBug: 8557703\nChange-Id: I2c36d00240c56e156e1bb430d8c22a73a068b70c\n"
    },
    {
      "commit": "d14dc3b87fbf80553f1cafa453816b7f11366627",
      "tree": "b1a26c875f451b79888f60cf73504aab799874e1",
      "parents": [
        "aa754dca90487356cabf07ade0e8d88c2630b784"
      ],
      "author": {
        "name": "Guang Zhu",
        "email": "guangzhu@google.com",
        "time": "Wed Jul 17 03:17:05 2013 +0000"
      },
      "committer": {
        "name": "Guang Zhu",
        "email": "guangzhu@google.com",
        "time": "Wed Jul 17 03:17:05 2013 +0000"
      },
      "message": "Revert \"Improve stack overflow diagnostics.\"\n\nThis reverts commit aa754dca90487356cabf07ade0e8d88c2630b784.\n\nChange-Id: Ifa76eee31f7f44075eb3a48554315b2693062f44\n"
    },
    {
      "commit": "aa754dca90487356cabf07ade0e8d88c2630b784",
      "tree": "b4cda0d4fa3935abd85b3ee178d35d0738e8a744",
      "parents": [
        "9562d38df1e4aba941b3433cfd0922fee5ea258b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 16 13:14:24 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 16 13:14:24 2013 -0700"
      },
      "message": "Improve stack overflow diagnostics.\n\nWe notify debuggerd of problems by installing signal handlers. That\u0027s\nfine except for when the signal is caused by us running off the end of\na thread\u0027s stack and into the guard page.\n\nBug: 8557703\nChange-Id: I1ef65b4bb3bbca7e9a9743056177094921e60ed3\n"
    },
    {
      "commit": "b95cf0d23a1db3b7c37bd98b0c86196796c9b029",
      "tree": "f9e43cf229b0bfe58029dd5adbac739d18df6742",
      "parents": [
        "59ed029b286a1564f635377296e4f088e0fd2afa"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 15 14:51:07 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jul 15 14:51:07 2013 -0700"
      },
      "message": "Fix pthread_getattr_np, pthread_attr_setguardsize, and pthread_attr_setstacksize.\n\npthread_getattr_np was reporting the values supplied to us, not the values we\nactually used, which is kinda the whole point of pthread_getattr_np.\n\npthread_attr_setguardsize and pthread_attr_setstacksize were reporting EINVAL\nfor any size that wasn\u0027t a multiple of the system page size. This is\nunnecessary. We can just round like POSIX suggests and glibc already does.\n\nAlso improve the error reporting for pthread_create failures.\n\nChange-Id: I7ebc518628a8a1161ec72e111def911d500bba71\n"
    },
    {
      "commit": "0f020d18b138e24b1fe34074808e07ac412f35a4",
      "tree": "75e84d43c82a0e8013d7b1c34d4da1fec64e116c",
      "parents": [
        "6a44d2271f372d0c65b05a5d3377bd00ce92824e"
      ],
      "author": {
        "name": "msg555",
        "email": "msg555@gmail.com",
        "time": "Thu Jun 06 14:59:28 2013 -0400"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 12 17:30:58 2013 -0700"
      },
      "message": "Handles spurious wake-ups in pthread_join()\n\nRemoved \u0027join_count\u0027 from pthread_internal_t and switched to using the flag\nPTHREAD_ATTR_FLAG_JOINED to indicate if a thread is being joined. Combined with\na switch to a while loop in pthread_join, this fixes spurious wake-ups but\nprevents a thread from being joined multiple times. This is fine for\ntwo reasons:\n\n1) The pthread_join specification allows for undefined behavior when multiple\n   threads try to join a single thread.\n\n2) There is no thread safe way to allow multiple threads to join a single\n   thread with the pthread interface.  The second thread calling pthread_join\n   could be pre-empted until the thread is destroyed and its handle reused for\n   a different thread.  Therefore multi-join is always an error.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d52255\nChange-Id: I8b6784d47620ffdcdbfb14524e7402e21d46c5f7\n"
    },
    {
      "commit": "cfa089df23ff50fcd5ed3854c54991d30be5fc7e",
      "tree": "c64519db5533b9324efe7e4a712ba327860bbb9d",
      "parents": [
        "74b324ac09db35d29d16695e9b9c1f0601599812"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 29 16:35:00 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 29 16:35:00 2013 -0700"
      },
      "message": "Extra logging in pthread_create.\n\npthread_create returns EAGAIN when it can\u0027t allocate a pthread_internal_t,\nwhen it can\u0027t allocate a stack for the new thread, or when clone(2) fails\nbecause there are too many threads. It\u0027s useful to be able to know why your\npthread_create just failed, so add some logging.\n\nBug: 8470684\nChange-Id: I1bb4497d4f7528eacce0db35c2014771cba64569\n"
    },
    {
      "commit": "8f2a5a0b40fc82126c691d5c30131d908772aab7",
      "tree": "0b29a5dc82395c076387edb5af9ca271a91264c0",
      "parents": [
        "e23ed8c6441389a79c6504295184f7249e01a197"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 15 15:30:25 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 15 16:12:58 2013 -0700"
      },
      "message": "Clean up internal libc logging.\n\nWe only need one logging API, and I prefer the one that does no\nallocation and is thus safe to use in any context.\n\nAlso use O_CLOEXEC when opening the /dev/log files.\n\nMove everything logging-related into one header file.\n\nChange-Id: Ic1e3ea8e9b910dc29df351bff6c0aa4db26fbb58\n"
    },
    {
      "commit": "40eabe24e4e3ae8ebe437f1f4e43cf39cbba2e9e",
      "tree": "19eef7fcbba616a52bd37f4c83ece3e918b25445",
      "parents": [
        "3e3b239d2be0c5a92e91385f4f10b8f7da8d2837"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Feb 14 18:59:37 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 15 12:08:59 2013 -0800"
      },
      "message": "Fix the pthread_setname_np test.\n\nFix the pthread_setname_np test to take into account that emulator kernels are\nso old that they don\u0027t support setting the name of other threads.\n\nThe CLONE_DETACHED thread is obsolete since 2.5 kernels.\n\nRename kernel_id to tid.\n\nFix the signature of __pthread_clone.\n\nClean up the clone and pthread_setname_np implementations slightly.\n\nChange-Id: I16c2ff8845b67530544bbda9aa6618058603066d\n"
    },
    {
      "commit": "4b4a8824289c48c823cd38bc63289d121aae3d67",
      "tree": "a1eaf7bd03b0588ada6dc30950f6f57a9164f8ea",
      "parents": [
        "991ee7d89574e8d04c8863a2850613073a2f96b3"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 12 17:15:59 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 12 17:15:59 2013 -0800"
      },
      "message": "Clean up pthread_create.\n\nBug: 3461078\nChange-Id: I082122a86d7692cd58f4145539241be026258ee0\n"
    }
  ]
}
