)]}'
{
  "log": [
    {
      "commit": "95c6cd753f028b1afc0c6a800a3dd6bd85a5a6a0",
      "tree": "3d785e53e88c0b5864a8129c7b13e31f5d0e9caf",
      "parents": [
        "508d270886e90fac23ce51f81864d009307f13ae"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 20 13:26:14 2019 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 20 13:26:14 2019 -0800"
      },
      "message": "Stop using the __ANDROID_API_x__ constants.\n\nHistorically we\u0027ve made a few mistakes where they haven\u0027t matched the\nright number. And most non-Googlers are much more familiar with the\nnumbers, so it seems to make sense to rely more on them. Especially in\nheader files, which we actually expect real people to have to read from\ntime to time.\n\nTest: treehugger\nChange-Id: I0d4a97454ee108de1d32f21df285315c5488d886\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": "c0f46564528c7bec8d490e62633e962f2007b8f4",
      "tree": "4dabb94963f869576828c5d169e74956f527031a",
      "parents": [
        "83590680649dc04ce8a98cd85b6356e1d6066564"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 09 15:38:52 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 15 11:07:30 2018 -0800"
      },
      "message": "Make android_get_application_target_sdk_version available to the NDK.\n\nAlso move this and android_get_device_api_level into \u003candroid/api-level.h\u003e\nso that they\u0027re always available.\n\nThis involves cleaning up \u003csys/cdefs.h\u003e slightly.\n\nBug: N/A\nTest: builds\nChange-Id: I25435c55f3549cd0d827a7581bee75ea8228028b\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": "5bc78c8bcd0c1e634c04029309ede3ec05f2d424",
      "tree": "ba41f009cdf5fb27c766b4efe05c4cbb566d2a85",
      "parents": [
        "8945d5e43a25737f3f888a90742cc918b1124a05"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 16 11:35:43 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 16 16:55:42 2016 -0800"
      },
      "message": "Add and use constants for the Android API levels.\n\nTest: bionic tests still pass\nChange-Id: If1b619cfc9db1d3f5d91f14f2ace71058dca0c4a\n"
    },
    {
      "commit": "ca482742985a22dbf5ee4a0afdf8525300f7785d",
      "tree": "5a12f9d0381a6f732d90c5565fba8a3d3b2526b6",
      "parents": [
        "126cf324a39689e0c16cf815d0fb01f2bc18df05"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Jan 25 17:38:44 2016 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Jan 25 17:39:18 2016 -0800"
      },
      "message": "Revert \"Revert \"Make sem_wait able to return errno EINTR for sdk \u003e 23.\"\"\n\nThis reverts commit 6d5108520225fd2c4b10ca63565545ec120aab4a.\nAnd add missing bionic_sdk_version.h.\n\nChange-Id: I24cc738b1fd1d26234c52afbc787f5b3c4a9c9cb\n"
    },
    {
      "commit": "6d5108520225fd2c4b10ca63565545ec120aab4a",
      "tree": "914cf5e7a79c5a0545cf233fcb69b01aa9249999",
      "parents": [
        "892b61d3409e8cdf0e121c688737eb058d57f7ab"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Jan 26 00:20:06 2016 +0000"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue Jan 26 00:20:06 2016 +0000"
      },
      "message": "Revert \"Make sem_wait able to return errno EINTR for sdk \u003e 23.\"\n\nBroke the build. There\u0027s no such file as bionic_sdk_version.h anywhere in the tree.\n\nThis reverts commit 892b61d3409e8cdf0e121c688737eb058d57f7ab.\n\nChange-Id: Iec3f4588edfb1d1524bb5f16451fd05dc6ebe44a\n"
    },
    {
      "commit": "892b61d3409e8cdf0e121c688737eb058d57f7ab",
      "tree": "abc63e4c8e1a525bdfe15b8447d0c73825d8861e",
      "parents": [
        "7150e5a8ef7c5f5c77720db7961e170580db08ea"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Jan 25 11:37:16 2016 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Jan 25 13:44:39 2016 -0800"
      },
      "message": "Make sem_wait able to return errno EINTR for sdk \u003e 23.\n\nPosix standards says sem_wait is interruptible by the delivery\nof a signal. To keep compatiblity with old apps, only fix that\nin newer sdk versions.\n\nBug: 26743454\n\nChange-Id: I924cbb436658e3e0f397c922d866ece99b8241a3\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": "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": "23360cc4980213d375718b7c124ecc0a21a1b1b7",
      "tree": "c633c09e1e5e99f9abfd7d68fc4f13b7bb74a744",
      "parents": [
        "8b279eadd3a635c31df9c570ab2144212bfd07cc"
      ],
      "author": {
        "name": "Stephen Hines",
        "email": "srhines@google.com",
        "time": "Tue Sep 29 09:28:41 2015 -0700"
      },
      "committer": {
        "name": "Stephen Hines",
        "email": "srhines@google.com",
        "time": "Tue Sep 29 10:04:54 2015 -0700"
      },
      "message": "Remove invalid left shifts of -1.\n\nBug: 24492248\n\nShifting sign bits left is considered undefined behavior, so we need to\nswitch these uses to unsigned equivalents. The time_t-related code is\nupdated relative to upstream sources.\n\nChange-Id: I226e5a929a10f5c57dfcb90c748fdac34eb377c2\n"
    },
    {
      "commit": "a3d97da4c5c96f2c224485928154bad111cd635f",
      "tree": "4aeb0ed6daa210dc79e9a48e210de9aeafa9601f",
      "parents": [
        "7f17aea2fc21aaf657824a023a4b7582fb74a2d9"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Jan 30 12:30:08 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Feb 03 16:35:57 2015 -0800"
      },
      "message": "Switch sem_t from bionic atomics to stdatomic.h.\n\nBug: 17572887\nChange-Id: If66851ba9b831cdd698b9f1303289bb14448bd03\n"
    },
    {
      "commit": "75129ae9f3448905bf837d774a94ff973efd812e",
      "tree": "16ec05cad9c84f1c831d59ff7d51ffb3569ee390",
      "parents": [
        "1364101067072c2ce6fa395cdef2534f338f30b1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 08 15:11:44 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 08 15:11:44 2014 -0700"
      },
      "message": "Don\u0027t silently return EINVAL for a NULL sem_t*.\n\nBug: 17571197\nChange-Id: Ied31d8de87fc10d20dc338be0457e9a4ddb9a0a5\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"
    }
  ]
}
