)]}'
{
  "log": [
    {
      "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.\""
    }
  ]
}
