)]}'
{
  "log": [
    {
      "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": "dd586f2ebd0c42904e699f3634568a38c97d4da7",
      "tree": "9622cf03564998a33d69f2039382844d81384e30",
      "parents": [
        "d3e5301a75256171199b23f6ba2c6651d05ce5f1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 16 15:15:58 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 16 15:15:58 2015 -0800"
      },
      "message": "sem_timedwait with a null timeout doesn\u0027t mean \"forever\".\n\nIt actually means \"crash immediately\". Well, it\u0027s an error. And callers are\nmuch more likely to realize their mistake if we crash immediately rather\nthan return EINVAL. Historically, glibc has crashed and bionic -- before\nthe recent changes -- returned EINVAL, so this is a behavior change.\n\nChange-Id: I0c2373a6703b20b8a97aacc1e66368a5885e8c51\n"
    },
    {
      "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": "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": "0307eee293e90e8584104a3c55bf2f270b1149b6",
      "tree": "22bd69a656e693251b0c5b92957b1317b00cf3bc",
      "parents": [
        "b804b9d67b9e3a8c63471ff9892f6abea2a58684"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Nov 16 20:19:31 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Nov 17 16:17:44 2015 -0800"
      },
      "message": "Avoid tsan warning about pthread_mutex_destroy.\n\nIf calling pthread_mutex_trylock from pthread_mutex_destroy, tsan\nwarns about an attempt to destroy a locked mutex.\n\nBug: 25392375\nChange-Id: I5feee20e7a0d0915adad24da874ec1ccce241381\n"
    },
    {
      "commit": "511cfd9dc8cb41bca4920687c7d816ee916ee8e5",
      "tree": "802f0fa957f99a38068981600a7fc81f68f04950",
      "parents": [
        "26e663d4796e74fc40a62b3d2a438b726bbb056e"
      ],
      "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": "Tue Jun 09 18:46:15 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\nChange-Id: If7e8860075ecd63c0064d80f64e226fad7bd3c26\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": "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": "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": "ecbfb25c504b7360d250c849ab47890ad54b6125",
      "tree": "916d3348f1b9ef4192f754f71ce422994370d44a",
      "parents": [
        "94babaee1b6598b15bd807461055d4dcaaa52f10"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Mar 17 11:34:57 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Mar 17 11:37:51 2015 -0700"
      },
      "message": "Fix build: pthread_mutex/pthread_detach.\n\nChange-Id: I9c7b6297d3bf3ab8004d05d44cc4c95159315c9e\n"
    },
    {
      "commit": "5b8e7cd957f9380e93c3aee84962d157fe0bc526",
      "tree": "c454f02e61518005d531a825e2f0469fac261bbf",
      "parents": [
        "c3307dc43b2526c4031837738b139d22831c5d09"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Mar 04 17:36:59 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Mar 12 21:54:41 2015 -0700"
      },
      "message": "Remove duplication in pthread_mutex.cpp.\n\nAlso add unit tests about thread woken up by pthread_mutex_unlock.\n\nBug: 19216648\n\nChange-Id: I8bde8105b00186c52a2f41d92458ae4a5eb90426\n"
    },
    {
      "commit": "140f3678f0f21eeda5916e9b8de87b93fd660a61",
      "tree": "4115c771e910e8969cb093fa124df987259bad3c",
      "parents": [
        "86fc96f73311f43980df770f4ff8022f1e9b296a"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Feb 03 10:32:00 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Feb 03 12:20:46 2015 -0800"
      },
      "message": "Add test about pthread_mutex_t owner tid limit.\n\nBug: 19216648\nChange-Id: I7b12955bdcad31c13bf8ec2740ff88ba15223ec0\n"
    },
    {
      "commit": "86fc96f73311f43980df770f4ff8022f1e9b296a",
      "tree": "0eb94839231c5c19cd7b4bf0954083ba670d62bd",
      "parents": [
        "6a3ff01cd4f063556cf25706ddc9dff82c351aba"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Jan 29 21:50:48 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Feb 02 15:00:01 2015 -0800"
      },
      "message": "Switch pthread_mutex_t from bionic atomics to \u003cstdatomic.h\u003e.\n\nBug: 17574456\nChange-Id: I5ce3d3dc07e804e9ce55c42920f47531b56e04de\n"
    },
    {
      "commit": "5b1111a6949b6751ce72bd0b034b7bbe6246a6b6",
      "tree": "0a081fcbc3a39613d611be2e5537eee737967052",
      "parents": [
        "c716dd1e21438ac6585be79fb799b3135e9b381f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 24 19:33:11 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 24 19:33:11 2014 -0700"
      },
      "message": "POSIX says pthread_mutex_trylock returns EBUSY, not EDEADLK.\n\nFound by unit test.\n\nChange-Id: Iffbd2f04213616927fbd7b5419460031f7a078e9\n"
    },
    {
      "commit": "3d773274ad6caaf7e0431c3d5eeb31f727b53d1a",
      "tree": "e1f6074157470da7a594f3f3d4300265332f271a",
      "parents": [
        "7d3f553f989f830976efa92ddc3c84661d4d42aa"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 07 23:31:06 2014 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 07 23:31:06 2014 +0000"
      },
      "message": "Revert \"Work around a bug in Immersion\u0027s libImmEmulatorJ.so.\"\n\nThis reverts commit 7d3f553f989f830976efa92ddc3c84661d4d42aa.\n\nChange-Id: I8909b6aa1d97e9a61dbe95a2d91b9fbe336b58f0\n"
    },
    {
      "commit": "7d3f553f989f830976efa92ddc3c84661d4d42aa",
      "tree": "cb8560d4abe6a37b4e45ca577e579d182d42aa6a",
      "parents": [
        "eeb9aa02b7f307a1d9b80731dd69ef9dd2f47e47"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 07 16:02:11 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 07 16:02:11 2014 -0700"
      },
      "message": "Work around a bug in Immersion\u0027s libImmEmulatorJ.so.\n\nThis library calls pthread_mutex_lock and pthread_mutex_unlock with a NULL\npthread_mutex_t*. This gives them (and their users) one release to fix things.\n\nBug: 17443936\nChange-Id: I3b63c9a3dd63db0833f21073e323b3236a13b47a\n"
    },
    {
      "commit": "04303f5a8ab9a992f3671d46b6ee2171582cbd61",
      "tree": "98d3997d33e93eeb91a2c2f331b57f35c180cbb2",
      "parents": [
        "adc01348ee51a4ad678b1c277f85cbbed5c2e728"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 18 16:11:59 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 19 17:37:06 2014 -0700"
      },
      "message": "Add semaphore tests, fix sem_destroy.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d76088\nChange-Id: I4a0561b23e90312384d40a1c804ca64ee98f4066\n"
    },
    {
      "commit": "a406ee6d5f616192e9a13afad6ac6a9969814fc1",
      "tree": "bc9d1575ddacb246d49109367b6151732fbfe19e",
      "parents": [
        "337c0cefdc4667143a1f4f2c30113b452c5d188f"
      ],
      "author": {
        "name": "Brigid Smith",
        "email": "brigidsmith@google.com",
        "time": "Mon Jul 21 15:38:06 2014 -0700"
      },
      "committer": {
        "name": "Brigid Smith",
        "email": "brigidsmith@google.com",
        "time": "Mon Jul 28 19:38:08 2014 -0700"
      },
      "message": "Added a bionic systrace class and tracing to pthread_mutex.cpp.\n\nbionic_systrace.h contains an implementation of tracing that\ncan be used with systrace.py and its associated viewer.  pthread_mutex\nnow uses this tracing to track pthread_mutex contention, which can be\nenabled by using the \"bionic\" command line option to systrace.\n\nBug: 15116468\nChange-Id: I30ed5b377c91ca4c36568a0e647ddf95d4e4a61a\n"
    },
    {
      "commit": "624996026b844ff2eba2283f4dc83ec363d85a11",
      "tree": "962bbae5f984db6b6737cfbdac05c61e84e92e6c",
      "parents": [
        "fae42a837ae7f880de9561c7b3c2b18e4a531e90"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 28 20:30:40 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 28 20:30:40 2014 -0700"
      },
      "message": "Minor style cleanup of some code I had to look at.\n\n(It turns out that this is the only place we\u0027re saying __inline in C++.)\n\nChange-Id: I8095e67a385087817c47caab9a621f82f8e0cfc8\n"
    },
    {
      "commit": "ff03a7aaade5826e3708f6e320d0612d4cdbdb72",
      "tree": "9cffe1df338bcf3c0e0b65458538b2ee8fb3f150",
      "parents": [
        "1454ff2574f0bee9fb3646c9c6dd30443e0dbd38"
      ],
      "author": {
        "name": "Brigid Smith",
        "email": "brigidsmith@google.com",
        "time": "Wed May 28 11:45:48 2014 -0700"
      },
      "committer": {
        "name": "Brigid Smith",
        "email": "brigidsmith@google.com",
        "time": "Wed May 28 11:48:49 2014 -0700"
      },
      "message": "Updated ambiguous comment in pthread_mutex_lock.\n\nThe comment used the phrase \"normal case\" when it more specifically refers to the \"recursive case,\" so I changed it to that.\n\nChange-Id: I8335cce4dee933c6a463aee653b28bd986b5b5e4\n"
    },
    {
      "commit": "2ea60ff0b415ad5b135f498a38c4b56ea75215aa",
      "tree": "71bfc0770b8d21119829467a723e07743b47ba41",
      "parents": [
        "0b10ffb40f3b426a7b5e734f90c41f56351729a0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 22 10:49:16 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 22 11:00:21 2014 -0700"
      },
      "message": "Remove unnecessary #includes of \u003csys/atomics.h\u003e.\n\nBug: 14903517\nChange-Id: I7b5bcebe58774a441da986cc02376dd88e00ea0e\n"
    },
    {
      "commit": "07f1ded1399805fa9367f4db2936832b0c22b7a5",
      "tree": "ef1ea3c1b18e92aad46fa839de895bf76a4780c7",
      "parents": [
        "e6c27a7af7a9b13e4e3d3ebd604d28effa9e9322"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 14 11:35:49 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed May 14 11:38:22 2014 -0700"
      },
      "message": "Remove the broken pthread deadlock prediction.\n\nThis hasn\u0027t built in over one release cycle and no one even noticed.\nart does this the right way and other projects should do the same.\n\nChange-Id: I7d1fb84c4080e008f329ee73e209ce85a36e6d55\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": "39b644a0e270df453c53d6060cd364391bb1c512",
      "tree": "fc937b2b00e2efe603ac0bd48fc0a1c832b46456",
      "parents": [
        "a0bf9bdea24164db96ec1d5dfa2cd327942671b6"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 04 10:55:39 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 04 10:55:39 2014 -0800"
      },
      "message": "Remove dead NULL checks from pthread code.\n\nGCC is removing these checks anyway because it knows the arguments\nmust be non-null, so leaving this code around is just confusing.\n\nWe know from experience that people were shipping code with locking\nbugs because they weren\u0027t checking for error returns. Failing hard\nlike glibc does seems the better choice. (And it\u0027s what the checked\nin code was already doing; this patch doesn\u0027t change that. It just\nmakes it more obvious that that\u0027s what\u0027s going on.)\n\nChange-Id: I167c6d7c0a296822baf0cb9b43b97821eba7ab35\n"
    },
    {
      "commit": "0e714a5b41451e84c5ded93a42c9a4b0a9440691",
      "tree": "86e6519cc723fb66a9432193da16b380255c22f7",
      "parents": [
        "8e541b12237f597c186820b9e18b059b620bef54"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 03 16:42:47 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 04 10:27:58 2014 -0800"
      },
      "message": "Implement POSIX pthread_mutex_timedlock.\n\nThis replaces the non-standard pthread_mutex_lock_timeout_np, which we have\nto keep around on LP32 for binary compatibility.\n\nChange-Id: I098dc7cd38369f0c1bec1fac35687fbd27392e00\n"
    },
    {
      "commit": "9e79af3b61b5a617c537862ebe72248beff58f19",
      "tree": "5901c5b3dd3eb00353ac1233f1506aa266a92221",
      "parents": [
        "611b903ca7ba9d604a9e2ebc1efa5a66f7ccc049"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 18 10:05:42 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 18 10:05:42 2013 -0800"
      },
      "message": "Small style cleanup.\n\nChange-Id: Ib45a4a2296232968296f9bd7cc3592ba46fd412d\n"
    },
    {
      "commit": "611b903ca7ba9d604a9e2ebc1efa5a66f7ccc049",
      "tree": "aacd4f90033fe14a9689caace700b9ed19af0a6b",
      "parents": [
        "e00f4890c71e9c9eb715faf2c7443732b2fdfae3",
        "4fae14f3335375714be3104742fa69fe65b02001"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 18 17:56:22 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Dec 18 17:56:22 2013 +0000"
      },
      "message": "Merge \"Properly detect timeout in pthread_mutex_lock_timeout_np_impl\""
    },
    {
      "commit": "4fae14f3335375714be3104742fa69fe65b02001",
      "tree": "bdf4e9cd74914f6b6a506ee1a65ac0634a556f73",
      "parents": [
        "3377165387d455d4cb56807a9c02cd2ece6cb24b"
      ],
      "author": {
        "name": "Ken Mixter",
        "email": "kmixter@google.com",
        "time": "Tue Dec 17 12:40:08 2013 -0800"
      },
      "committer": {
        "name": "Ken Mixter",
        "email": "kmixter@google.com",
        "time": "Tue Dec 17 14:26:01 2013 -0800"
      },
      "message": "Properly detect timeout in pthread_mutex_lock_timeout_np_impl\n\nPreviously we were checking against a positive errno which\nwould not be returned from a system call.\n\nChange-Id: I8e3a36f6fbf5ccc2191a152a1def37e2d6f93124\n"
    },
    {
      "commit": "dff7203ee99ccac446b9a1c4371753a5216c6db4",
      "tree": "854bf99a06ea89a29e8eee49d0c5cc361e30531c",
      "parents": [
        "73ef27cd0de0c6b7d4f6bc9c2250dbae3f0a88c3"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 11 14:54:00 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 11 14:54:00 2013 -0800"
      },
      "message": "Remove harmful attempts to be helpful in pthread_mutex functions.\n\nMost callers won\u0027t check for EINVAL, so it\u0027s best to fail early.\nGCC takes the nonnull attribute as a guarantee that an argument\nwon\u0027t be NULL, so these hacks were already ineffective, which is\nhow we found that at least one commercial game was using NULL\nas if it\u0027s a mutex, but actually getting no-op behavior.\n\nBug: 11971278\nChange-Id: I89646e043d931778805a8b692e07a34d076ee6bf\n"
    },
    {
      "commit": "36d6188f8cd8b948fb797f11d9620d63d0c2215a",
      "tree": "86b3162cac031151b2ae44b4d554fce4f9456147",
      "parents": [
        "318e86ed887e04e593f3db9b84b402d5501ced9b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 19 13:31:58 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 19 14:08:54 2013 -0800"
      },
      "message": "Clean up forking and cloning.\n\nThe kernel now maintains the pthread_internal_t::tid field for us,\nand __clone was only used in one place so let\u0027s inline it so we don\u0027t\nhave to leave such a dangerous function lying around. Also rename\nfiles to match their content and remove some useless #includes.\n\nChange-Id: I24299fb4a940e394de75f864ee36fdabbd9438f9\n"
    },
    {
      "commit": "66759d6041b33706c3a92dde48492ba4f2bbab2f",
      "tree": "53c8282836fb5f88d285a0305e7204202f6eabfb",
      "parents": [
        "0360e3ab2d21d4b4b3d5590765857bef595c0046"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 31 14:09:39 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 31 14:09:39 2013 -0700"
      },
      "message": "Move the pthread debugging flags to the right place.\n\nChange-Id: Ie805bd837d1f72cdf1818e056c0baeb0857e4e84\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": "d0d0b52da375bfa85947a4257198791f615f18a8",
      "tree": "80ccee6c52b1aabfabefdfdf0f118309113decd2",
      "parents": [],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 30 21:37:56 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Oct 30 21:37:56 2013 +0000"
      },
      "message": "Merge \"Remove an obsolete ARM gdb hack.\""
    }
  ]
}
