)]}'
{
  "log": [
    {
      "commit": "cd4ef87efdf88cb5abc17ee6739208b3386420ec",
      "tree": "7a68c4566bac47defc07ded47679b71b90a9fd7b",
      "parents": [
        "51e98b83789c0ae840acc5c78dd785b94d4d7dfd"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Fri Jul 29 00:40:29 2022 +0000"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Fri Jul 29 00:54:57 2022 +0000"
      },
      "message": "RefBase: test for stack check\n\nSurprised this isn\u0027t breaking anything, so wanted to\nmake sure it worked.\n\nBug: 232557259\nTest: libutils_test\nChange-Id: Iaec47d644c02dc190e397c6f84dcfab4cc76f566\n"
    },
    {
      "commit": "51e98b83789c0ae840acc5c78dd785b94d4d7dfd",
      "tree": "3867838d31effe8e8915e6a14e93fa40afe11a3e",
      "parents": [
        "ef46fe4e2b5f1909b9e9a4ae66f70a859211d1d6",
        "c340a08b1b2d439f482144d03df1a781c26cb0e5"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Thu Jul 28 16:11:10 2022 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jul 28 16:11:10 2022 +0000"
      },
      "message": "Merge \"libutils: RefBase always disallow on stack\""
    },
    {
      "commit": "c340a08b1b2d439f482144d03df1a781c26cb0e5",
      "tree": "9ee13956999522d0c67ba82270d9477f08adb85f",
      "parents": [
        "ccb1ce32cca359c1b6648b2337d79830da3ec31c"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Tue Jul 26 17:09:50 2022 +0000"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Tue Jul 26 22:10:51 2022 +0000"
      },
      "message": "libutils: RefBase always disallow on stack\n\nBefore, we only did this in sp\u003c\u003e constructors, but we can always make\nthis check during the initial incStrong.\n\nSince prebuilts call into the existing report race function declared\nin StrongPointer.h, we still call this function from RefBase.cpp.\n\nBug: 232557259\nTest: libutils_test\nChange-Id: I4080b1869b83ecf655fc9c182b6de768a6358adf\n"
    },
    {
      "commit": "483a2def8dd26d0145e752250f3ddb382ea1f6f3",
      "tree": "3f161aff1c725ea73c41e8b2641813e502dedf3f",
      "parents": [
        "ccb1ce32cca359c1b6648b2337d79830da3ec31c"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Tue Jul 26 17:57:39 2022 +0000"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Tue Jul 26 17:59:14 2022 +0000"
      },
      "message": "libutils: RefBase: extra check for double own\n\nBug: 232557259\nTest: libutils_test\nChange-Id: Ibd400750e7973600ec3fa493838a3b52cafe3add\n"
    },
    {
      "commit": "5c15de21dab52c40342671a79ee7791d5e26feec",
      "tree": "183d3454b7fde53a5e8da57291309cb0087d0387",
      "parents": [
        "83785021f7892e4590dd653f1b4ed5d98476c003"
      ],
      "author": {
        "name": "Andrei Homescu",
        "email": "ahomescu@google.com",
        "time": "Fri Dec 10 05:32:17 2021 +0000"
      },
      "committer": {
        "name": "Andrei Homescu",
        "email": "ahomescu@google.com",
        "time": "Wed Mar 16 01:35:19 2022 +0000"
      },
      "message": "Disable call stacks on every OS except Linux/Android\n\nTo keep libutils (and consequently libbinder) as compact\nand portable as possible, this disables call stacks on all\noperating systems except Linux and Android.\n\nBug: 224644083\nTest: m\nChange-Id: I0d77c49022e852c2b8607f555174c4f9d54ed3df\n"
    },
    {
      "commit": "f164de8935a66522f83f8f3d2af3b6ead7cc713f",
      "tree": "af3e755620676bd7efda38c0ca13acc39b661b2e",
      "parents": [
        "927d9d1c689a94ea65367e840bee9e53296b57c2"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Fri Mar 11 02:28:57 2022 +0000"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Fri Mar 11 02:46:31 2022 +0000"
      },
      "message": "libutils: ~RefBase more logs\n\nThis code was a bit confusing because Android runs with an old debug\nmode on. The flag around this is removed to make it more clear what\nis going on, and the log is promoted D -\u003e W.\n\nBug: N/A\nTest: boot, check logs\nChange-Id: I4645b1a7b8e252336a6f9482ce6b57e1b907619d\n"
    },
    {
      "commit": "0cbef728f97f550c1af59547af4593f8fc4203e2",
      "tree": "ab185a820968767560bac309849f5dc15a5facf5",
      "parents": [
        "c1c2b4f8168c4683dcd94fef13d7abf0f7a6abf1"
      ],
      "author": {
        "name": "陈冠有",
        "email": "chenguanyou@xiaomi.com",
        "time": "Sun Aug 22 16:36:28 2021 +0000"
      },
      "committer": {
        "name": "陈冠有",
        "email": "chenguanyou@xiaomi.com",
        "time": "Sun Aug 22 16:36:36 2021 +0000"
      },
      "message": "RefBase: Unknown mFlag meaning\n\nChange-Id: I3ddd1895c48c682bdb0868e890c62029710bf1c8\n"
    },
    {
      "commit": "da75cef983fb1dc44c6221dbd35f670a885046e5",
      "tree": "6612bdfa77f6a8c1c30d922fb8e372a7476cd0a3",
      "parents": [
        "767f264fa4a8f019f6acfce8290e10f18113a524"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Wed Mar 31 16:05:04 2021 +0000"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Mon Apr 05 17:45:18 2021 +0000"
      },
      "message": "ANDROID_UTILS_REF_BASE_DISABLE_IMPLICIT_CONSTRUCTION\n\nIn form, inspired by ANDROID_BASE_UNIQUE_FD_DISABLE_IMPLICIT_CONVERSION.\n\nWe get occasional bugs about sp double-ownership. When this flag is\nenabled, we have:\n- you must construct RefBase objects using sp\u003c\u003e::make\n- you must construct wp\u003c\u003e objects by converting them to sp\u003c\u003e\n- if you want to convert a raw pointer to an sp\u003c\u003e object (this is\n  possible since the refcount is used internally, and is used commonly\n  on this*), then you must use \u0027assertStrongRefExists\u0027 semantics which\n  aborts if there is no strong ref held. That is, if a client uses\n  std::make_shared and then calls a function which internally used to\n  call `sp\u003cT\u003e(this)`, you would now call\n  `sp\u003cT\u003e::assertStrongRefExists(this)`, and the double ownership\n  problem would become a runtime error.\n\nBug: 184190315\nTest: libutils_test\nChange-Id: Ie18d3146420df1808e3733027070ec234dda4e9d\n"
    },
    {
      "commit": "8377b10f291b776031b2ee7156c438954a605214",
      "tree": "6b0fb336eb1c47df0ec113ef3efe41d178d66103",
      "parents": [
        "5c573b45ecadd300fd3e729c07a67aa8ec331701"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Oct 20 18:10:39 2020 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Oct 21 06:04:00 2020 +0000"
      },
      "message": "Disable callstack for mac too.\n\nBug: 171353386\n\nTest: Builds.\nChange-Id: Id8a5cce170682ea43aa641c187c22cb31b6fd017\n"
    },
    {
      "commit": "0e69160ebc7ba41c9456788c55e1a6ea1d72d79e",
      "tree": "f1e0b35b87e9f4d294254663d556d5a2d62d909a",
      "parents": [
        "862b01746ef5b028cf928ff0611cf42a624653dc"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Oct 14 14:13:58 2020 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Oct 20 12:46:14 2020 -0700"
      },
      "message": "Remove include/backtrace symlink.\n\nThis requires a few other changes to support building libutils\nproperly. It does appear the windows versions of libutils is\nreferencing CallStack code, but it doesn\u0027t seem to cause any problems.\nHowever, I removed those references completely for the windows build.\n\nAlso removed a few extra spaces that seem to have accumulated in the\nRefBase.cpp.\n\nBug: 170465278\n\nTest: Builds and libutils unit tests pass.\nChange-Id: Ibeee7791b13636b34bdd592c5420fd91620f752a\n"
    },
    {
      "commit": "502f4864d6c92fce4cb0e4f7f2b12d7124da902b",
      "tree": "b34cb377a8a6543fb0baf68e566b120209b3aaf9",
      "parents": [
        "c2501fda600ea2067099c1de042e3db7acde74ee"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Sep 13 11:08:41 2018 -0700"
      },
      "committer": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Mon Sep 17 16:50:11 2018 +0000"
      },
      "message": "Suppress implicit-fallthrough warnings.\n\nAdd FALLTHROUGH_INTENDED for clang compiler.\n\nBug: 112564944\nTest: build with global -Wimplicit-fallthrough.\nChange-Id: I40f8bbf94e207c9dd90921e9b762ba51abab5777\n"
    },
    {
      "commit": "2a019ecf4f4326b45e14d62f9fe2ca994e21742f",
      "tree": "596ab95d03d41a25a48ed1680fc4982fc50dca9c",
      "parents": [
        "7d4e7d3156997da003b3e60e5b9fe024ae244940"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Aug 07 23:45:25 2018 +0000"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed Aug 08 16:30:12 2018 -0700"
      },
      "message": "Revert^2 \"Prepare to fail in RefBase destructor if count is untouched\"\n\nThis reverts commit b9d0753d2ba88cc60947823e68bb3bed60268361.\n\nReason for revert: Re-land with MacOS workaround.\n\nTest: Build (on Linux) and boot AOSP, with weak symbols enabled and disabled.\n\nChange-Id: I5150cd90367178f3b039761dca3bccc9c2987df1\n"
    },
    {
      "commit": "b9d0753d2ba88cc60947823e68bb3bed60268361",
      "tree": "a12bb42c3c2783fbdddd12aefae11b608dcbd5aa",
      "parents": [
        "9d3146af22588e0c23e110be13a515f5347bf687"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Aug 07 05:35:12 2018 +0000"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Aug 07 05:35:12 2018 +0000"
      },
      "message": "Revert \"Prepare to fail in RefBase destructor if count is untouched\"\n\nThis reverts commit 9d3146af22588e0c23e110be13a515f5347bf687.\n\nReason for revert: It appears that weak symbols don\u0027t work as expected on MacOS, breaking the MacOS aapt build.\n\nChange-Id: Ica0955106485a7bf2e2c3f09ff7910e230eb4139\n"
    },
    {
      "commit": "9d3146af22588e0c23e110be13a515f5347bf687",
      "tree": "0b5e7764beebbcfdc8ff23551da515361612e35a",
      "parents": [
        "f6b823141eb5dcb0cdc387ee376a7414d27c3819"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Apr 27 16:35:18 2018 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Aug 03 17:56:47 2018 -0700"
      },
      "message": "Prepare to fail in RefBase destructor if count is untouched\n\nMove towards crashing if a normally configured RefBase object is\ndestroyed without ever incrementing the reference count. We\u0027ve been\nthreatening to do this for a long time. The previously last known\nviolation had been fixed.\n\nThis also fixes stack trace printing from RefBase, which had previously\nbeen broken, and which we found necessary to track down further\nviolations of this rule.\n\nUnfortunately, we found several more violations with the aid of\nthat fix. After existing CLs are submitted, there are\nstill some failures, but they are no longer numerous. Thus this CL\ndoesn\u0027t actually crash in the event of a violation, but does log a\nverbose stack trace if it encounters one.\n\nBugs have been filed against the remaining known RefBase client offenders.\nWe plan to enable crashing on usage violations once those are fixed.\n\nThe fix for the stack trace printing breakage unfortunately requires\nthe use of weak symbols in order to avoid a circular build dependency.\nWe expect to eventually replace this with execinfo.h functionality.\n\nSome random reformatting, driven by consistency with current formatting\nrequirements.\n\nAdd missing include to BacktraceMap.h.\n\nBug: 79112958\nBug: 30292291\nTest: Boot AOSP, Master\nChange-Id: I8151c54560c3b6f75ffc4c48229f0388a2066958\n"
    },
    {
      "commit": "e1731a4f2e05f1abb4a45602067708851eaf1e14",
      "tree": "339c0ce3d3de7d6f5e0fb9bdada9b6210d1d470f",
      "parents": [
        "895acebe946e34d2626716c5c4d7d7f2cc28c39d"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Mon Jul 16 18:11:34 2018 -0700"
      },
      "committer": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Mon Jul 16 18:11:34 2018 -0700"
      },
      "message": "[libutils]  Modernize codebase by replacing NULL with nullptr\n\nFixes -Wzero-as-null-pointer-constant warning.\n\nTest: m\nBug: 68236239\nChange-Id: I5e89ec8c42151875439d2656475a8739ab9cb7dc\n"
    },
    {
      "commit": "122352d983805b8ded5f8f3c07e75844244aba40",
      "tree": "2512a37968404bd39265da943bee33e33e064744",
      "parents": [
        "15251c24b9cbb809aad74d8e5796f0eb6d83d8bb"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Mon Oct 02 15:20:07 2017 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Nov 01 11:32:55 2017 -0700"
      },
      "message": "Use -Werror in system/core\n\n* Move -Wall -Werror from cppflags to cflags.\n* Fix/suppress warning on unused variables.\n\nBug: 66996870\nTest: build with WITH_TIDY\u003d1\nChange-Id: I1e05e96a1d0bcb2ccef1ce456504b3af57167cc5\n"
    },
    {
      "commit": "6753bc4433eafab3ac805e233db14969c9242d14",
      "tree": "7250904a5863e9a062cfceb76a18ef06f68ec40e",
      "parents": [
        "8b7feee38fe31eb40a50c55144a850cbc37e4089"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Sun Oct 01 12:38:44 2017 -0700"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Mon Oct 02 19:50:39 2017 +0000"
      },
      "message": "Silence a use-after-free warning from the analyzer\n\nThe analyzer is known to be very conservative in the face of atomic\noperations (e.g. https://bugs.llvm.org/show_bug.cgi?id\u003d34365); this case\nis no different.\n\nIt\u0027s concerned that `delete this;` might read a different value for\n`flags`, and proceed to delete `refs`. Since there are many comments\nexplaining why this won\u0027t happen (and it all looks sane to me), use a\nNOLINT to silence this warning.\n\nAnalyzer warning:\nsystem/core/libutils/RefBase.cpp:445:5: warning: Use of memory after it\nis freed\n\nBug: 27101951\nTest: mma. Use-after-free warning is gone.\nChange-Id: Ic1623971bd1bad546fbb12a79439116c89a6762d\n"
    },
    {
      "commit": "44cee05904fbedd41e8ab2b7d748e4db396ca7f2",
      "tree": "06bb46bb7d62d0dda823c1f49d2ce0d4e6bdb7e2",
      "parents": [
        "8e16ceecb770df194ed7fb6ba70c01505a52a609"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Mar 27 17:59:01 2017 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Mar 29 20:39:06 2017 +0000"
      },
      "message": "split LightRefBase out of RefBase\n\nBug: 36532900\nTest: compiled\nChange-Id: I3088e1a219e04cf924744d3a0c2d374918bb6395\n"
    },
    {
      "commit": "22dbf3947fedf988e714a4703ddf85fc41413f90",
      "tree": "ad823e9592de58265e4740a4d1ae251bfa260348",
      "parents": [
        "6048d9db5f11045412504b533ea9a92a7df6354c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Feb 28 15:06:51 2017 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Mar 03 14:47:47 2017 -0800"
      },
      "message": "clean-up libutils includes\n\nmoved Foo.h as first include of Foo.cpp, and\nremoved redundant includes.\n\nMade NativeHandle non virtual.\n\n\nTest: run \u0026 compile\nBug: n/a\n\nChange-Id: I37fa746cd42c9ba23aba181f84cb6c619386406a"
    },
    {
      "commit": "1a055a895719ef76c519de60a5942edbf530950c",
      "tree": "a4bf0d34c1b3830ccccb419f3042ce836ec56f99",
      "parents": [
        "01003d40fc03080604f4dfb905a77a814feedffe"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Wed Feb 15 19:04:40 2017 -0800"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Wed Feb 15 19:04:40 2017 -0800"
      },
      "message": "RefBase.cpp remove unused include typeinfo\n\nTest: pass\nChange-Id: Iec9b9e1e9b6c974124b2043f550fb110cc22846d\n"
    },
    {
      "commit": "1811d156e9c6b5486d25090ec3e911632dc6edff",
      "tree": "c37354e50a853c4ed9ccfedd8c0c2b9ce904c6ef",
      "parents": [
        "b98317ff1cd85158fde27413c0dbc0d180935de6"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Sep 26 14:24:48 2016 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Sep 27 16:21:12 2016 -0700"
      },
      "message": "Fix more system/core/include warnings\n\nThe warnings in these files were hidden by -isystem\nframework/native/include.\n\nBug: 31752268\nTest: m -j\nChange-Id: I2a54376aea380ee24e6483fb7d35fdfe8991c490\n"
    },
    {
      "commit": "17b5b82d64686d482e6dcf96ee54fd62234d5f27",
      "tree": "59c9126e3cbcecbc0b06178f55bc3b39cadef1ce",
      "parents": [
        "588b3b0c03690573bb8147d9645f0400e5db9a22"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Sep 15 18:15:37 2016 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Sep 22 13:03:15 2016 -0700"
      },
      "message": "Fix warnings in libutils headers\n\nsystem/core/include is included in the global include path using\n-isystem, which hides all warnings.  Fix warnings in libutils\nheaders in preparation for moving from -isystem to -I.\n\n- Fix implicit cast from int64_t to long in Condition.h.  Remove\n  the __LP64__ check and always compare against LONG_MAX before\n  casting.\n- Fix implicit cast from size_t to ssize_t in KeyedVector.h\n- Fix -Wshadow-field-in-constructor warnings in Looper.h and RefBase.h\n- Move destructors for MessageHandler and LooperCallback to Looper.cpp\n  and ReferenceRenamer and VirtualLightRefBase to RefBase.cpp to prevent\n  vtables in every compilation unit.\n- Declare template variables in Singleton.h\n- Fix old-style casts in StrongPointer.h and TypeHelpers.h\n- Use template metaprogramming in TypeHelpers.h to avoid warnings on\n  memmove on non-trivial types.\n- Add an assignment operator to key_value_pair_t to complete\n  rule-of-three\n- Use memcpy instead of dereferencing a reinterpret_casted pointer to\n  treat the bits of a float or double as int32_t or int64_t\n- Escape unicode sequences inside doxygen comments between \\code and\n  \\endcode\n- Remove WIN32 ZD definition in Compat.h, %zd works fine with mingw\n- Fix WIN32 printf warnings in Filemap.cpp\n- Initialize mNullValue with 0 in LruCache.h, some of the tests use a\n  non-pointer type for TValue.\n\nTest: m -j native\nBug: 31492149\nChange-Id: I385a05a3ca01258e44fe3b37ef77e4aaff547b26\n"
    },
    {
      "commit": "23c857ebd68fec4296f8483a41a0fff6692c9ac2",
      "tree": "bee2569fb78084bc6f04e456aefc06dad863b836",
      "parents": [
        "07f14c9cdde718bface371d075ccc7f8bf16f098"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Aug 02 18:39:30 2016 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Sat Aug 13 11:17:51 2016 -0700"
      },
      "message": "Make RefBase more robust and debuggable\n\nThis prevents two different kinds of client errors from causing\nundetected memory corruption, and helps with the detection of others:\n\n1. We no longer deallocate objects when the weak count goes to zero\nand there have been no strong references.  This otherwise causes\nus to return a garbage object from a constructor if the constructor\nallocates and deallocates a weak pointer to this. And we do know\nthat clients allocate such weak pointers in constructors and their\nlifetime is hard to trace.\n\n2. We abort if a RefBase object is explicitly destroyed while\nthe weak count is nonzero.  Otherwise a subsequent decrement\nwould cause a write to potentially reallocated memory.\n\n3. We check counter values returned by atomic decrements for\nplausibility, and fail immediately if they are not plausible.\n\nWe unconditionally log any cases in which 1 changes behavior\nfrom before. We abort in cases in which 2 changes behavior, since\nthose reflect clear bugs.\nIn case 1, a log message now indicates a possible leak. We have\nnot seen such a message in practice.\n\nThe third point introduces a small amount of overhead into the\nreference count decrement path. But this should be negligible\ncompared to the actual decrement cost.\n\nAdd a test for promote/attemptIncStrong that tries to check for\nboth (1) above and concurrent operation of attemptIncStrong.\n\nAdd some additional warnings and explanations to the RefBase\ndocumentation.\n\nBug: 30503444\nBug: 30292291\nBug: 30292538\n\nChange-Id: Ida92b9a2e247f543a948a75d221fbc0038dea66c\n"
    },
    {
      "commit": "9ba7192c1f3a8fd4c1e9590ae07046242e02c239",
      "tree": "1cbfcccd30ae061b8e90e97f0867441f825ec61c",
      "parents": [
        "077135b18c830d46d753a8d09b81b01a154d006d"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Jul 21 18:56:55 2016 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Aug 09 15:12:19 2016 -0700"
      },
      "message": "Improve RefBase documentation, especially for clients.\n\nAdd basic interface documentation to RefBase.h.\n\nMuch, but not all, of this is cut-and-pasted from an email message\nfrom Mathias Agopian. The rest is reconstructed from the code.\n\nDelete some, now redundant, text from Refbase.cpp, and add a bit\nmore about the implementation strategy.\n\nSome minor fixes to internal comments.\n\nBug: 30292291\nChange-Id: I56518ae5553bc6de0cc2331778e7fcf2e6c4fd87\n"
    },
    {
      "commit": "7f27cbc3f4583e13a2a48e8148cbdfc0abc43af8",
      "tree": "3dbd1995c23b18f78ccf44e918eb0ca87bf82f88",
      "parents": [
        "02ccdc5db9bb39488a3fe22a907b3211c3a464b9"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Jul 29 14:39:10 2016 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Jul 29 14:39:10 2016 -0700"
      },
      "message": "Fix race bug in attemptIncStrong\n\nThe compensating onLastStrongRef call could be made even when there\nwas no onIncStrongAttempted call to compensate for.  This\nhappened in the OBJECT_LIFETIME_STRONG case when e.g. curCount\nwas initially zero, but was concurrently incremented by another\nthread.\n\nI believe the old code was also incorrect in the\ncurCount \u003d INITIAL_STRONG_VALUE + 1 case,\nwhich seems to be possible under unlikely conditions.\nIn that case, I believe the compensating call IS needed.\nThus the condition was also changed.\n\nBug: 30503444\nChange-Id: I44bcbcbb1264e4b52b6d3750dc39b041c4140381\n"
    },
    {
      "commit": "e263e6c6337a24d56dc803792206e54981ad53a5",
      "tree": "40df67e22f19ed6a84c44694f7c871c1a4f6c0ff",
      "parents": [
        "c5016de66b6d778dd7c292e215aad6b5c079e92c"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed May 11 18:15:12 2016 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue May 17 16:11:11 2016 -0700"
      },
      "message": "Fix memory order and race bugs in Refbase.h \u0026 RefBase.cpp\n\nConvert to use std::atomic directly.\n\nConsistently use relaxed ordering for increments, release ordering\nfor decrements, and an added acquire fence when the count goes to\nzero.\n\nFix what looks like another race in attemptIncStrong:\nIt seems entirely possible that the final adjustment for\nINITIAL_STRONG_VALUE would see e.g. INITIAL_STRONG_VALUE + 1,\nsince we could be running in the middle of another initial\nincrement.\n\nAttempt to somewhat document what this actually does, and\nwhat\u0027s expected from the client. Hide the documentation in\nthe .cpp file for now.\n\nRemove a confusing redundant test in decWeak. OBJECT_LIFETIME_STRONG\nand OBJECT_LIFETIME_WEAK are the only options, in spite of some\nof the original comments.\n\nIt\u0027s conceivable that either of these issues has resulted in\nactual crashes, though I would guess the probability is small.\nIt\u0027s hard enough to reason about this code without the bugs.\n\nBug: 28705989\nChange-Id: I4107a56c3fc0fdb7ee17fc8a8f0dd7fb128af9d8\n"
    },
    {
      "commit": "1c563d96f000876d77b2d33fbfb03c241bc503e1",
      "tree": "2b4938eda86ade588cc77bbee202075d3f659bb4",
      "parents": [
        "3abd03232efd53bb3a73d1e76f6f72754457e18d"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Fri Apr 29 15:44:04 2016 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Fri Apr 29 15:44:04 2016 -0700"
      },
      "message": "Fix google-explicit-constructor warnings.\n\nBug: 28341362\nChange-Id: I4504e98a8db31e0edcbe63c23f9af43eb13e9d86\n"
    },
    {
      "commit": "e7aa2b2c8378b458345477d1f6d9904490263bb6",
      "tree": "125b6116858579422945357b40930b5738a94eab",
      "parents": [
        "d1ec9c450d8dc9d24b5f0254111449ecfcbeaea6"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Wed Mar 02 14:02:55 2016 -0800"
      },
      "committer": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Mon Mar 07 18:40:40 2016 -0800"
      },
      "message": "Cleanup uses of sprintf so we can deprecate it.\n\nAlso cleans up two instances of open() with useless mode params, and\nchanges a few uses of snprintf to use sizeof(buffer) instead of\nhardcoded buffer sizes.\n\nChange-Id: If11591003d910c995e72ad8f75afd072c255a3c5\n"
    },
    {
      "commit": "5bed8036644f552210a7cfcbed2d6d20cf2981b0",
      "tree": "37f784e181086e99b17e00d46b6da30529751539",
      "parents": [
        "bf0f25905b12581f05b65b1ebe95211c727ae483"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Apr 30 11:10:46 2014 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Jun 02 15:57:50 2014 -0700"
      },
      "message": "libutils: turn on -Werror\n\n- Deal with some -Wunused issues\n- Override PRI macros (windows)\n- Revert use of PRI macros on off64_t (linux)\n- Deal with a gnu++11 complaince issue\n\nChange-Id: Ie66751293bd84477a5a6dfd8a57e700a16e36964\n"
    },
    {
      "commit": "55e0f1c8bdb5d7299ba0c79e084b7ac749eb4c3b",
      "tree": "985adfc219f738ebfc66f7204896b36fc613a34f",
      "parents": [
        "e7f3cce7aa1e51f904f80df02d8d0fe5fe85e14e"
      ],
      "author": {
        "name": "Ian McKellar",
        "email": "ianloic@google.com",
        "time": "Mon Mar 31 15:59:31 2014 -0700"
      },
      "committer": {
        "name": "Ian Mckellar",
        "email": "ianloic@google.com",
        "time": "Tue Apr 01 15:02:57 2014 -0700"
      },
      "message": "Fix stack trace logging in RefBase.\n\nThis was broken about 5 months ago in change I78435ed49aa196a0efb45bf9b2d58b62c41737d3.\nSee: https://goto.google.com/jhtss\n\nChange-Id: Icc32993552efed3015bc1b79a7bd872d7510e020\n"
    },
    {
      "commit": "d98e07fdf9c338589f263c47ce5c844ed43efad5",
      "tree": "d4ff9849df225df1e4c46386fdabe30407ba5513",
      "parents": [
        "be06210c508d5878dcc7d185e5613f4c7e38dfe8"
      ],
      "author": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Fri Aug 02 14:40:08 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Fri Aug 02 14:40:08 2013 -0700"
      },
      "message": "move libs/utils to libutils\n\nChange-Id: I6cf4268599460791414882f91eeb88a992fbd29d\n"
    },
    {
      "commit": "9eb2a3b1c0cc1ff3082a9283e24c8babc112f56b",
      "tree": "f88a03d8dd28a8f641be1c2eac57a42f0a11e599",
      "parents": [
        "19159f90020c04ac2f4dcb39424d740f765ed9a3"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 06 20:20:50 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:01 2013 -0700"
      },
      "message": "libutils clean-up\n\nChange-Id: I6ff4cfc736751de2912c697f954e45e275f2d386\n"
    },
    {
      "commit": "d34a8cad1efa1c8da1c7b5ad81226b822064cf73",
      "tree": "232169b5cab9d411190c45aec246dd7b935df82f",
      "parents": [
        "da8ec4b634ffc165fc12f8ae2671d61e684bd248"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Mar 21 17:12:40 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:01 2013 -0700"
      },
      "message": "improved CallStack a bit\n\n- added a ctor that updates and dumps the stack immediately\n- added a \"logtag\" parameter to dump()\n\nChange-Id: Ie51c256071d282591752243bdb4f68cf9ff8829d\n"
    },
    {
      "commit": "da8ec4b634ffc165fc12f8ae2671d61e684bd248",
      "tree": "7024ef2682886d1c427303170c0f68a3bc9b8a52",
      "parents": [
        "6cd548c7154c1633a0ed318c31dd22c50a5f5d02"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Mar 19 17:36:57 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:01 2013 -0700"
      },
      "message": "disable RefBase consistency checks (NDEBUG)\n\nBug: 8328715\nChange-Id: Ib57646ff909fd8744610f37f3b50d90d884dff31\n"
    },
    {
      "commit": "6cd548c7154c1633a0ed318c31dd22c50a5f5d02",
      "tree": "ce9928ccfb45dac23ead4ddae0da0253b0cdd2fe",
      "parents": [
        "6d4419d9b130719dd2355861907dc8f87368a51c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Mar 18 22:27:41 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:01 2013 -0700"
      },
      "message": "Fix a crasher with RefBase debugging and vectors of wp\u003c\u003e\n\nbackground:\nwe have some code to fix-up the IDs of references when\nusing RefBase\u0027s DEBUG_REFS when those refs are managed by\narrays wp\u003c\u003e or sp\u003c\u003e (this is because wp\u003c\u003e / sp\u003c\u003e don\u0027t have\na trivial ctor when DEBUG_REFS is enabled, and Vector\ntreats them as trivial for obvious performance reasons)\n\nthis is complicated by the fact that we don\u0027t want to have\nto recompile everything when enabling DEBUG_REFs (i.e.: the\nVector code cannot know wheter it\u0027s enabled or not for its\ntemplate stuff).\n\nproblem:\nthere was a bug in the fix-up code for wp\u003c\u003e which was trying\nto access the weakref_impl from the RefBase* however, this was\nmoronic since RefBase could have been destroyed if there wasn\u0027t\nany more strong refs -- and this happned. Instead we need to get\nthe weakref_impl directly from the wp\u003c\u003e\n\nChange-Id: Ie16e334204205fdbff142acb9faff8479a78450b\n"
    },
    {
      "commit": "6d4419d9b130719dd2355861907dc8f87368a51c",
      "tree": "7b6e0e3ffb1d7b45a1205720f65991f29ae901d4",
      "parents": [
        "b73559d86c9017166da28e1d59a884f13417426d"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Mar 18 20:31:18 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:01 2013 -0700"
      },
      "message": "A few tweaks to RefBase debugging\n\n- stacks are now saved in /data/debug which must be\n  created and writable by the user.\n\n- removed \"always fatal\" DEBUG_REFS option, it wasn\u0027t\n  really needed.\n\n- DEBUG_REFS_ENABLED_BY_DEFAULT is not the default anymore\n  (usually people want to target which refs they\u0027re tracking)\n\nChange-Id: I37fae72e9dacde6ce1fa8f7dbe2bc01b1a1b95e5\n"
    },
    {
      "commit": "a729ab1e3be17ed20073f7c035df0433888164d6",
      "tree": "fa70ca013c9a559ffd4a1d88dc3f3d873ebc07e5",
      "parents": [
        "8a4cdbcdb935554a660c78e20686afdad8e8ca75"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Mar 14 15:26:30 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:01 2013 -0700"
      },
      "message": "fix a couple race-conditions in RefBase::promote()\n\nBug: 8390295\nChange-Id: I7a48e3bf5b213cc1da2b8e844c6bb37ee24cb047\n"
    },
    {
      "commit": "8a4cdbcdb935554a660c78e20686afdad8e8ca75",
      "tree": "d959875986b3e1493bef690833df09d99bc7129b",
      "parents": [
        "31ba37f1c80801ee128749d4772c47f23323a3be"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Mar 11 21:27:16 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:01 2013 -0700"
      },
      "message": "temporary: enable ASSERTs in RefBase\n\nthis is in an attempt to get more data on\nbug 8328715.\n\nChange-Id: I9333a67c2d7f67f4d9b2fc5eb1ad8a7b2d1c6dcb\n"
    },
    {
      "commit": "769828d2d44fca3829e628bb424aa426aa468ee9",
      "tree": "c3f5773e46734cb471575de9986476a50ac212e1",
      "parents": [
        "ca3e2a276afa03cfffb2b989e28adfc44ec50d6f"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Mar 06 17:51:15 2013 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:00 2013 -0700"
      },
      "message": "Fix RefBase debugging. O_CREAT must specify the mode.\n\nChange-Id: I51c6df3cfd59b20ca73c3edee86bc2f74dbde1b1\n"
    },
    {
      "commit": "ae07445e9793724324b93bb593fe20be2a386707",
      "tree": "21b2375319af1a9810b23628351d8d6863de837c",
      "parents": [
        "1b781ab0e0e8d59a7a8d1140bf6dee96a48a160c"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Mon Jan 09 18:35:44 2012 +0000"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Rename LOG_ASSERT to ALOG_ASSERT  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/157519\n\nBug: 5449033\nChange-Id: I8ceb2dba1b031a0fd68d15d146960d9ced62bbf3\n"
    },
    {
      "commit": "1b781ab0e0e8d59a7a8d1140bf6dee96a48a160c",
      "tree": "3714a0510c545d8420a0b9e33c6328fe0ca63aa4",
      "parents": [
        "61d341b8d3d771f4ef3dd54df0502b19b7a2ab4d"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Fri Jan 06 19:20:56 2012 +0000"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Rename (IF_)LOGE(_IF) to (IF_)ALOGE(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/#/c/157220\n\nBug: 5449033\nChange-Id: Ic9c19d30693bd56755f55906127cd6bd7126096c\n"
    },
    {
      "commit": "eb0953307ce75cec031aedbf21abff08e5a737e5",
      "tree": "f68629af933e04983e26db5503983990de9b2881",
      "parents": [
        "53ddace1a585c0515ea1c2e2091c4a8cd3a94864"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Tue Dec 20 16:23:08 2011 +0000"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Rename (IF_)LOGD(_IF) to (IF_)ALOGD(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/156016\n\nBug: 5449033\nChange-Id: I4c4e33bb9df3e39e11cd985e193e6fbab4635298\n"
    },
    {
      "commit": "b37fbe9f810545bf62468fea5958325caa3635be",
      "tree": "948cb4f6c9742003740e5a53655d5446e9312463",
      "parents": [
        "8b4cf779b29144d6d469afb4daabcbf069725db2"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Thu Oct 20 11:56:00 2011 +0100"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Rename (IF_)LOGV(_IF) to (IF_)ALOGV(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/#/c/143865\n\nBug: 5449033\nChange-Id: I0122812ed6ff6f5b59fe4a43ab8bff0577adde0a\n"
    },
    {
      "commit": "ad09965050f8226fda6f5238db060ce65abaa71c",
      "tree": "ea9fe13c4be2839f0677ea8f7a4392053518892c",
      "parents": [
        "c3a5225d4ec0e98ca671ada8cba17878c656e3d5"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Aug 10 21:07:02 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "fix a memory leak and memory corruption in RefBase\n\nwe would leak a weakref_impl if a RefBase was never incWeak()\u0027ed.\nthere was also a dangling pointer that would cause memory corruption\nand double-delete when a custom destroyer was used to delay the\nexecution of ~RefBase.\n\nit turns out that the custom destroyer feature caused most of the\nproblems, so it\u0027s now gone. The only client was SurfaceFlinger\nwho now handles things on its own.\n\nRefBase is essentially back its \"gingerbread\" state, but the\ncode was slightly cleaned-up.\n\nBug: 5151207, 5084978\nChange-Id: Id6ef1d707f96d96366f75068f77b30e0ce2722a5\n"
    },
    {
      "commit": "9c8fa9ed4111c69c82ace01c8a7ac3beeacdce78",
      "tree": "f04e23041d0b4dd0c2585bd8f461061652d8d4d5",
      "parents": [
        "267ba69c2e4ae39b9fe98d4be592c7b59e7e57a1"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 20:42:47 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "revert surfaceflinger leak fix as it uncovered a crasher on xoom (DO NOT MERGE)\n\nThis reverts commit 52a43990880b27808bcf562afcc4209d34728e6e.\n\nChange-Id: I1856a48f863b051395b8091ddfd1e01292fa1b1e\n"
    },
    {
      "commit": "267ba69c2e4ae39b9fe98d4be592c7b59e7e57a1",
      "tree": "ec1160244d799eab869ab7f65aabe26943df4ef2",
      "parents": [
        "dace0b45d00814dda275d81b82c1673dd88cf3e9"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 20:41:24 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "Revert \"revert surfaceflinger leak fix as it uncovered a crasher on xoom\"\n\nThis reverts commit af6edba59e250adbdfa5b3c3be134f70d8c38a16.\n\nChange-Id: I7793d3ca8a4d20a2b188364f47854328ab5f586d\n"
    },
    {
      "commit": "dace0b45d00814dda275d81b82c1673dd88cf3e9",
      "tree": "f04e23041d0b4dd0c2585bd8f461061652d8d4d5",
      "parents": [
        "0151ac8945216bb6c7ae23b6a7e449e5ede8a69c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 19:20:52 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "revert surfaceflinger leak fix as it uncovered a crasher on xoom\n\nBug: 4600244\nChange-Id: Ia68ebf0f243a051ff6a21b3863e3e5d259bbf7ac\n"
    },
    {
      "commit": "9b6259aa579291deb7334a968bd30878a5fec386",
      "tree": "fe824d4cba3dc2b8c8fabb06948ccc9801b1e74c",
      "parents": [
        "a538e268e653d8fa1ea27659f507bc0ce5ceead0"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Sun Jun 12 18:05:53 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "fix RefBase so it retains binary-compatibility with gingerbread (DO NOT MERGE)\n\nBug: 4595257\nChange-Id: I1db83149107d7dab1f0b7e73c684e0ff82e17e62\n"
    },
    {
      "commit": "4571143fd31f03a63e7d251b28bb58f2c8b584e0",
      "tree": "60d1ea6fd629f0e4611433ba5a321671358a488a",
      "parents": [
        "7c9f673ed619f0054dc6de45ac9c9396112c30d4"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 08 16:05:30 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Fix a leak in RefBase (DO NOT MERGE)\n\nthis bug was introduced recently. it caused RefBase\u0027s weakref_impl\nstructure to be leaked for every RefBase object (about 20 bytes).\n\nChange-Id: Ia9b155fbfa643ef72cfb8129e96260a3b806a78c\n"
    },
    {
      "commit": "2be848de6b7041da7f335a1053cbfbf841a5d1e3",
      "tree": "8d66cb55e2fcf7a2c7bbd47f144416d01fbf80a0",
      "parents": [
        "d781137601c05b623305592fbbe7b2d7d69087dd"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 19 20:41:27 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Call RefBase::destroy() when OBJECT_LIFETIME_* is not the default\n\nChange-Id: Ifb2069e095dba57b7d97e9f2d942fd85fa975f58\n"
    },
    {
      "commit": "d781137601c05b623305592fbbe7b2d7d69087dd",
      "tree": "88a065a261a10f9915618a003b03cf4c3a92ac4f",
      "parents": [
        "23138b63df8788333f09a468cce36fd76d562577"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 19 18:03:31 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "RefBase subclasses can now decide how they want to be destroyed.\n\nThis adds a destroy() virtual on RefBase which\nsublasses can implement. destroy() is called\nin lieu of the destructor whenthe last strong\nref goes away.\n"
    },
    {
      "commit": "8bb27951f592713bcb2c0e6605d89da665131637",
      "tree": "25e7f2513b03c4209b0a7f1daf336f26b0a2a3b3",
      "parents": [
        "aa13c1b90e5d9cae064bb425dd094ccbd411e073"
      ],
      "author": {
        "name": "Josh Stone",
        "email": "cuviper@gmail.com",
        "time": "Fri Apr 22 11:13:35 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "libutils: Fix an improper const-cast in RefBase\n\nUnder Fedora 15 Beta, gcc 4.6.0 warns:\n\n  frameworks/base/libs/utils/RefBase.cpp: In member function\n    ‘void android::RefBase::weakref_type::trackMe(bool, bool)’:\n  frameworks/base/libs/utils/RefBase.cpp:483:67: error: passing\n    ‘const android::RefBase::weakref_impl’ as ‘this’ argument of\n    ‘void android::RefBase::weakref_impl::trackMe(bool, bool)’\n    discards qualifiers [-fpermissive]\n\ntrackMe is not a const function, so don\u0027t use const in the static_cast\nto a weakref_impl pointer.\n\nChange-Id: I3c9ba73eb127985f5f54197ffecf2939c50f632c\n"
    },
    {
      "commit": "7332f80db5b942253f69b9b2e6cc3ae08d957d0e",
      "tree": "eb51d063b42cbe247c0216337318f6b7a80fd204",
      "parents": [
        "3e0f87541f7871ffde51c722d54550774fe1b7c3"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 25 16:11:44 2011 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Fix sp\u003c\u003e conversion operator / constructor\n\nsome of the conversion operators were not using the proper\npointer type when calling incStrong/decStrong, usually it\nhas no bad consequences, but for some implementation\nof the ref-counted object it could lead to recording the wrong\nowner id.\n\nChange-Id: If574b9069b8a4cf6e0911a992c8f095aba799995\n"
    },
    {
      "commit": "b26ea8b30f11cf0ad11ac7983208514a1bfafb75",
      "tree": "ce7599f183785ee8caccfa83b0a19283f500e761",
      "parents": [
        "966a48f3e78e75c3a4f3a2f23b98e970f06bf983"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Feb 16 20:23:43 2011 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Fix some issues with RefBase debugging.\n\nFirst slipt sp\u003c\u003e out of RefBase into StrongPointer.h so it can be reused\nmore easily and to make it clear that it doesn\u0027t require RefBase.\n\nNote: the rest of the change only affects the system when DEBUG_REFS is enabled.\n\nThe main problem we fix here is that the owner id associated with each\nreference could get out of date when a sp\u003c\u003e or wp\u003c\u003e was moved, for\ninstance when they\u0027re used in a Vector\u003c \u003e.\n\nWe fix this issue by calling into RefBase::moveReferences from\na template specialization for sp\u003cTYPE\u003e and wp\u003cTYPE\u003e of the\ntype helpers. RefBase::moveReferences() has then a chance to\nupdate the owner ids.\n\nThere is a little bit of trickery to implement this generically in\nRefBase, where we need to use a templatized functor that can turn\na sp\u003cTYPE\u003e* casted to a void* into a RefBase*.\n\nIntroduced a new debug option DEBUG_REFS_FATAL_SANITY_CHECKS\ncurrently set to 0 by default as there seem to be an issue\nwith sp\u003cANativeWindow\u003e which trips the sanity checks.\n\nChange-Id: I4825b21c8ec47d4a0ef35d760760ae0c9cdfbd7f\n"
    },
    {
      "commit": "84a23fa4a9a2dca0f53fae2283b57fff988d1c74",
      "tree": "5991d8c7dd73ace2abd9df291972dd1c70a02cf1",
      "parents": [
        "dafff0bcc10fe1ff80e68a31793bbdea2ec8d0c3"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Feb 16 15:23:08 2011 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Remove RefBase.h dependency on TextOutput.h\n\nChange-Id: I72cd6b98ef82b4868fe1c8ec87862cf43fb4ee73\n"
    },
    {
      "commit": "cbb1011c95e0c25c29e40e203a6a31bccd029da3",
      "tree": "4697a3a86867bf33c2d9dd4e4a2743d3eb947523",
      "parents": [
        "cf59fa8dc7ddca5a172860223b06afed5d4ec0e0"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:31:44 2009 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:49 2013 -0700"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "cf59fa8dc7ddca5a172860223b06afed5d4ec0e0",
      "tree": "e780750523e4f032abf902a0e6ff8b9d52c54e54",
      "parents": [
        "7aa707a5d654b7af67b133955c454c8e23a12abc"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:45 2009 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:49 2013 -0700"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "d245d1d09731d6a19e8a25559d3907f54441ac3d",
      "tree": "b79df48666f286bd33efb4ffdbf4b3fa28f5dd91",
      "parents": [
        "13f4c9fb279f1b34a3b47a6eac80b8a09d2d3a79"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:46 2013 -0700"
      },
      "message": "Initial Contribution\n"
    }
  ]
}
