)]}'
{
  "log": [
    {
      "commit": "a625ee2063dec60996f01e0274e4c352ab75c46b",
      "tree": "5654e79f8e65ba2372ff038d1e4285ea3ecf6629",
      "parents": [
        "498b4de964b5d38952acfe2d1823c13f20a641d3"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jun 01 14:16:32 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jun 02 10:10:24 2017 -0700"
      },
      "message": "Use libdemangle for function names.\n\nBug: 62141808\n\nTest: Ran unit tests, ran malloc debug with leaks and verified functions\nTest: are demangled.\nChange-Id: I1900632e9a55bb818b1aabc798224ff3eebc1fca\n"
    },
    {
      "commit": "c0352bbd5f8bd4c7696d3b71a0056dcfb2b44708",
      "tree": "ae90fd70a7381d5c9366feb8cfb16a240a06e1cd",
      "parents": [
        "a559cff654afd31d718d5f476003584f48c5932b"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu May 25 18:26:37 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu May 25 18:38:45 2017 -0700"
      },
      "message": "Add offset to backtrace_string printing.\n\nThe libmemunreachable code uses backtrace_string to print out the backtrace\ninformation. However, when the offset of the map that a frame is in is\nnon-zero, no information is printed. This means that when a frame comes from\na shared library loaded from an apk, it\u0027s impossible to tell which\nshared library the frame is really coming from.\n\nAdd the offset display when it\u0027s non-zero. This means this can now be fed\nto development/scripts/stack to decode the frame.\n\nBug: 37276041\n\nTest: Ran dumpsys meminfo --unreachable on an app that leaks from a\nTest: shared library and verified the offset output is present.\nChange-Id: I61d34ae3f617622d354cc099eff520a64782b6e2\n"
    },
    {
      "commit": "4c65669ab77e5811ee5a6ad424403893265dc4b7",
      "tree": "5b1503d8e9b437fe85416f6816b63acafd3a5e4a",
      "parents": [
        "1143a629772c85b779b0f8249e1e223e27ff7481"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed May 24 19:04:33 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu May 25 17:23:08 2017 -0700"
      },
      "message": "Update malloc debug documentation.\n\nTest: NA\nChange-Id: I8ab73bfc28c7a673efb5b0cec6067989153f092a\n"
    },
    {
      "commit": "2b0f2a48557ab2dd1171aa3ae79359ba44143a01",
      "tree": "9f4b094e2f7c5e8409be584613bf20db56474850",
      "parents": [
        "8fbd15a6d0818916a821bc2138208f0251c9754f"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri May 19 13:47:16 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri May 19 13:47:16 2017 -0700"
      },
      "message": "Fix missing function export.\n\nBug: 36401135\n\nTest: Actually enable debug malloc and verify it loads properly.\nTest: Ran unit tests.\nChange-Id: I9df1699b06bb14c5df2c3cab35dc2eb0819033f1\n"
    },
    {
      "commit": "a1c0d2fd4ce96e123c4ae6506c9d637d747e1fe2",
      "tree": "b1f89edbd67d6b09b9cbdfb1bf03b65b2dac9ad4",
      "parents": [
        "ac58d33d343eba6a3370f541467f09802c48b24b"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon May 15 15:50:19 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon May 15 16:59:16 2017 -0700"
      },
      "message": "Add support for modifying decay timer.\n\nAdd the mallopt function, and only a single option so far.\n\nBug: 36401135\n\nTest: Built and booted bullhead.\nTest: Ran jemalloc unit tests.\nTest: Ran bionic unit tests.\nTest: Ran a test that allocated and free\u0027d a large piece of memory,\nTest: and verified that after changing the parameter, the PSS\nTest: sticks around (decay timer set to 1), the PSS is purged (decay\nTest: timer set to 0).\nChange-Id: I6927929b0c539c1023d34772d9e26bb6a8a45877\n"
    },
    {
      "commit": "7a3681e5b6c39bc2b3b62031ca5941dbf7bc4e63",
      "tree": "78c25e2a38b7efed8db770a623a5cbfb7eaab11d",
      "parents": [
        "ca5e0f49ca5df873a20c996755175b5c9c1e2ed9"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Apr 24 17:48:32 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed May 03 08:50:43 2017 -0700"
      },
      "message": "Move libc_log code into libasync_safe.\n\nThis library is used by a number of different libraries in the system.\nMake it easy for platform libraries to use this library and create\nan actual exported include file.\n\nChange the names of the functions to reflect the new name of the library.\n\nRun clang_format on the async_safe_log.cpp file since the formatting is\nall over the place.\n\nBug: 31919199\n\nTest: Compiled for angler/bullhead, and booted.\nTest: Ran bionic unit tests.\nTest: Ran the malloc debug tests.\nChange-Id: I8071bf690c17b0ea3bc8dc5749cdd5b6ad58478a\n"
    },
    {
      "commit": "2b2b25b87827102671cdd4b25c01aa22a9971a63",
      "tree": "d318825c7548379a307beee5b78580e51ce97a52",
      "parents": [
        "e06c69d07324f3da67aa063202e698dedd831365"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Apr 05 19:13:03 2017 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Apr 06 15:30:42 2017 -0700"
      },
      "message": "Refactor Config from a struct to a class.\n\nThis should make it easier to add new options, and to add options that\nare complex. For example, I want to modify the behavior of\nrecord_allocs_file so that it also enables record_allocs to a default\nstate.\n\nTest: All unit tests pass.\nTest: Enable the backtrace option and restart.\nChange-Id: Idf5cdeed06ade3bc2c8ae39d228734bf65209b4f\n"
    },
    {
      "commit": "426b00a29b61a3ac0135373e8c5140957bd867da",
      "tree": "7d8245cd14cf4f31f2f379c67fd60a4914b34b2d",
      "parents": [
        "b3b11edda111a44c979aa5cd5363ce6064ff4092"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Mar 09 13:47:37 2017 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Mar 09 13:47:37 2017 -0800"
      },
      "message": "Fix the way malloc debug returns info.\n\nWhen I rewrote malloc debug, I accidentally thought that each\nvalue returned in the info buffer contained the number of backtrace\nframes in the backtrace. This was incorrect, it should have been\nthe total number of allocations with the same backtrace.\n\nThis is a temporary fix that sets that value to 1. The better fix is\nto de-dupe backtraces and then return all allocations of the same size\nwith the same backtrace.\n\nI updated the documents to describe this.\n\nBug: 31854476\n\nTest: Unit tests pass.\nChange-Id: Idf9efaa3d363923b5d7543d90dc7c65a0ed553d9\n"
    },
    {
      "commit": "191d2f3c9959d1b051bac8346b0f80b0bcb0ef15",
      "tree": "cfa030fe8325c7e999e6d3c2da136d9ceaa3cfb7",
      "parents": [
        "7844b4c5dbd0be9ea4212a523da2dd6a4804032c"
      ],
      "author": {
        "name": "Vijay Venkatraman",
        "email": "vijaykv@google.com",
        "time": "Mon Jan 23 18:56:53 2017 -0800"
      },
      "committer": {
        "name": "Vijay Venkatraman",
        "email": "vijaykv@google.com",
        "time": "Mon Jan 23 18:56:53 2017 -0800"
      },
      "message": "Removed include log\\logger.h from log_fake.cpp\n\nTest: Compile malloc_debug_unit_tests\nChange-Id: I635687016570ba52c571435b87d8e89f7f04d609\n"
    },
    {
      "commit": "ac81fe8657119c265edcc2f05b3e5b7c5b17ae9f",
      "tree": "99a6e825926829bb7c8d955cbc96ae1777691ef9",
      "parents": [
        "8945d5e43a25737f3f888a90742cc918b1124a05"
      ],
      "author": {
        "name": "Tamas Berghammer",
        "email": "tberghammer@google.com",
        "time": "Fri Aug 26 15:54:59 2016 +0100"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Nov 17 13:13:27 2016 -0800"
      },
      "message": "Enable malloc debug using environment variables\n\nPreviously malloc debug can be enabled only using global settings\naccessible to the root user only. This CL adds a new option to enable\nit using environment variables making it possible to use it with pure\nnative (shell) applications on production builds (from shell user) and\nprepares it for using it from logwrapper on production devices.\n\nRemove the old environment variable and property since they are not\nnecessary.\n\nTest: Enable malloc debug using environment variable and verify\nTest: that it only affects the commands launched from the shell.\nTest: Enable malloc debug using the property variable and verify\nTest: that it affects all commands.\nTest: Run all unit tests in 32 bit and 64 bit.\nChange-Id: Iecb75a3471552f619f196ad550c5f41fcd9ce8e5\n"
    },
    {
      "commit": "a19bc2d4edfc261bdccfc5f855c50e83477b3757",
      "tree": "2cb3b588486f4d25f0574499fe6a1913e56cacbf",
      "parents": [
        "f97b27a9c06a61206dd1edbbfc5e11b2a293b462"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Nov 15 14:04:16 2016 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Nov 16 10:55:20 2016 -0800"
      },
      "message": "Fix uninitialized variable usage.\n\nIf the dladdr call fails, then info.dli_fname will be unitialized.\nMake sure that this can\u0027t happen.\n\nBug: 32907235\n\nTest: Enabled malloc debug on an angler and verified that function names\nTest: still work.\nChange-Id: I738e66d9f37bce07bc4c10f1f9bac11fbfdae2c7\n"
    },
    {
      "commit": "ac66d16a5287eb045114c55581213928502198a7",
      "tree": "acafb85f9b39d59fe3eba1779c1a8c9de53722a5",
      "parents": [
        "1d20532f5c5f8c1638735eb04586be82a7d0379c"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Sep 28 14:51:12 2016 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Sep 28 14:54:06 2016 -0700"
      },
      "message": "Update documentation.\n\nFix the incorrect mention of when the zygote flag is set on a size.\n\nAdd information about how to use am dumpheap -n to dump the native\nheap to a file.\n\nTest: Documentation only change.\n\nChange-Id: I82e810ee7ffffcf7506fb6fd9bcfdfb0465a48be\n"
    },
    {
      "commit": "4bef28161f6c13b3690914eb14413faf5c74e91c",
      "tree": "ff7fd27b8cdecc121e4b80b563f93ba49a4b1c80",
      "parents": [
        "52ea18658fb3939aa02cebcb53eef053ba132566"
      ],
      "author": {
        "name": "Tamas Berghammer",
        "email": "tberghammer@google.com",
        "time": "Fri Sep 02 16:35:50 2016 +0100"
      },
      "committer": {
        "name": "Tamas Berghammer",
        "email": "tberghammer@google.com",
        "time": "Wed Sep 07 16:12:02 2016 +0100"
      },
      "message": "Fix unittests broken by 545808a\n\nChange-Id: I590af5958e4dcb772b710be965ed6c99cd1d9234\n"
    },
    {
      "commit": "545808a60875868d5cc5226024440679590bb808",
      "tree": "c6a120ff56cdee0e20c80e8750679f9a4b86c598",
      "parents": [
        "42d24ca8188fac3ba96a1b9a482924658668973b"
      ],
      "author": {
        "name": "Tamas Berghammer",
        "email": "tberghammer@google.com",
        "time": "Fri Aug 26 12:34:16 2016 +0100"
      },
      "committer": {
        "name": "Tamas Berghammer",
        "email": "tberghammer@google.com",
        "time": "Fri Aug 26 12:34:16 2016 +0100"
      },
      "message": "Fix a typo in the debug malloc usage info\n\nChange-Id: I010fdc6c228a5f64edfef1c267cde7a2eef5190b\n"
    },
    {
      "commit": "baa4899d386a79a23a85762e02c1c5e7faa53778",
      "tree": "1dda201a320ece4b88790fb7418bba022d9bc552",
      "parents": [
        "48cedda02a9874d59b2b3652d0427abce7fedaab"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Jul 13 11:15:21 2016 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Jul 14 09:07:56 2016 -0700"
      },
      "message": "Convert malloc_debug from Android.mk to Android.bp\n\nChange-Id: I60ad376d222a92a29263c2804dcd1bd0d3c383d0\n"
    },
    {
      "commit": "7bd01783a830f72c1245c262a7fd9a199e90aed1",
      "tree": "5bd657e6c452d5f9d81a6c9b156ee748c8a8f070",
      "parents": [
        "a0e205e3b4f7993affb864260e924ce9f20573d0"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Apr 20 12:30:58 2016 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jul 08 14:05:17 2016 -0700"
      },
      "message": "Add the record alloc option.\n\nThis option adds the ability to record all of the allocation requests\nand dump them to a file when a signal is sent to the process.\n\nIncluded in this change, redo the option processing to add a new\nstring option.\n\nBug: 27747898\n\nChange-Id: Ida043362e38b5eb1d459c99db9c2581015dab366\n"
    },
    {
      "commit": "eab48032901e1555fae8e52ffb9571bcfcc466a9",
      "tree": "214ac062c703009a2af79ed9aa7033b8f9edcc87",
      "parents": [
        "d1c96e21593fe5ff4c2989b9902036c65532b4fd"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed May 25 13:04:29 2016 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed May 25 13:34:54 2016 -0700"
      },
      "message": "Update documentation for malloc debug.\n\nAdd a new document that describes the previous version of malloc debug.\n\nAdd a small update to the current documentation to indicate it only\napplies to N and later.\n\nChange-Id: Ief74c253ba79018777aa688bde7f5b35319fa4d4\n"
    },
    {
      "commit": "9f0aab88a881303be9babb273063a9ad6a1ee643",
      "tree": "68d4c888bbbaf54c1bbc4bd5827bb69b82d3f88b",
      "parents": [
        "0f93237db72d2d6d3fc3c491fd9f8641ad255d50",
        "62e3a078aa7b156139b1a2cec77e1a84eb10c5a4"
      ],
      "author": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed May 04 00:37:58 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed May 04 00:37:58 2016 +0000"
      },
      "message": "Merge \"Fix google-explicit-constructor warnings.\""
    },
    {
      "commit": "62e3a078aa7b156139b1a2cec77e1a84eb10c5a4",
      "tree": "b37425943e0cd7284b319d6cad98bd71dcfdc8bb",
      "parents": [
        "9ee905f12fa0aeb4ae0df708e15d2ffcfaf58000"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue May 03 12:08:05 2016 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue May 03 12:08:05 2016 -0700"
      },
      "message": "Fix google-explicit-constructor warnings.\n\nBug: 28341362\nChange-Id: I84effbdfa1b9b39328a909b7f70fe17e7ee316c8\n"
    },
    {
      "commit": "c7bfe2ee564e5a3cb22d8b6b6c48f4584ccfb374",
      "tree": "7abc6534349deaec677abb9eddfd464350407bfc",
      "parents": [
        "23e29e3be03d5226544774e2a64c924bae82e07b"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Apr 26 16:07:29 2016 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Apr 26 16:43:28 2016 -0700"
      },
      "message": "Update documentation to work with gitiles.\n\nRemove the \u003cpre\u003e and \u003ci\u003e and \u003cb\u003e and use the native markdown versions\nof these.\n\nBug: 27902359\nChange-Id: Id20190d10114610d126a20b14b392ca467638f96\n"
    },
    {
      "commit": "97fd7d95f5abd3fbc3274b2591883ecdd9cc03cc",
      "tree": "71e473fe2bd617df202a64db25880adb6e6b5d2f",
      "parents": [
        "1c3a5d87f2844b637f48f43ca22a6ac5e4cbf9c9"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Apr 20 16:44:39 2016 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Apr 20 16:44:39 2016 -0700"
      },
      "message": "Change pointer to allocation in unit tests.\n\nI changed the output from \"pointer\" to \"allocation\" for allocation\nmismatches. I forgot to update the tests.\n\nBug: 28218530\nChange-Id: I3278cb1dd17fb50ff7448c00e069c1af68ce5a57\n"
    },
    {
      "commit": "96d961cf0b573984f59ecaa916033c1022be9498",
      "tree": "a64054a84886b0e340585ac2f4f4d38c8a1c8c41",
      "parents": [
        "2c32c20fa9c730d4357b036f898c84e288ecb290",
        "713a8e36f863c27736ad4f29a5fd9bf84be83aaf"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Apr 19 17:51:41 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 19 17:51:42 2016 +0000"
      },
      "message": "Merge \"Add malloc debug documentation.\""
    },
    {
      "commit": "713a8e36f863c27736ad4f29a5fd9bf84be83aaf",
      "tree": "8689621c38a95bc7dc846bc6636069dac9403e22",
      "parents": [
        "322d6cfb33c817f46ea853de51f0a006cb874bef"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Mar 18 14:29:51 2016 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Apr 15 14:17:44 2016 -0700"
      },
      "message": "Add malloc debug documentation.\n\nBug: 27902359\nBug: 28218530\nChange-Id: I4b0e83cba7a9a0da745599ad546559a2b30e70c5\n"
    },
    {
      "commit": "ea26b33248663a836d2f0719cb4e46967b648fe2",
      "tree": "30c13529fed73bab313373ba3ad5a10c9795ced8",
      "parents": [
        "668fddb3ba36b52a16381513b1a0a42d9dd910e1"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Apr 15 14:13:52 2016 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Apr 15 14:13:52 2016 -0700"
      },
      "message": "Small fixes to malloc debug.\n\n- Change the printed name from pointer to allocation to be explicit about\n  what is wrong.\n- Change the signal to be SIGRTMAX - 19 instead of SIGRTMIN. This should\n  prevent problems if we have to reserve other real time signals.\n\nBug: 28218530\nChange-Id: Ic7d9c471929264d8e47bafaffc16e099840c9e71\n"
    },
    {
      "commit": "55a89a48f41da349735627c2ae8985895955b1ca",
      "tree": "c946bd9b7e1353787f278e5face49cae5d8f238d",
      "parents": [
        "03a16d3db7c5fff733d28250212821ec2ff5eccd"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Apr 07 17:14:53 2016 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Apr 12 15:36:53 2016 -0700"
      },
      "message": "Small refactor.\n\n- Move all ScopedDisableDebugCalls into the debug_XXX calls. This avoids\nany issues that might arise where every part of the code needs to properly\nguard anything that might allocate. Instead everything is already guarded.\n- Add a pointer to debug_data in all of the XXData classes. This avoids\ncalling individual functions passing in the debug_data pointer.\n- Flip the NO_HEADER_OPTIONS to an explicit HEADER_OPTIONS list since fewer\noptions actually require a header.\n- Move the extern of g_debug to the DebugData.h header.\n\nChange-Id: Ia213a391b4a44d9ce122a709d09fe4f1b5426f36\n"
    },
    {
      "commit": "d0919623a2ef56107590eca9a9522a250fb8bd4a",
      "tree": "b0e66ab45ca64f3fb90e03205ebd814f5c55c4f0",
      "parents": [
        "8d0af0bf8004c65f13b985643004a915d7e382eb"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Mar 15 22:39:39 2016 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Mar 16 17:38:08 2016 -0700"
      },
      "message": "Fix race in malloc debug option free_track.\n\nThe free track mechanism could fail if, at the same time a free occurs,\nanother thread is trying to free and verify the same allocation. This\ndoesn\u0027t work if the freed allocation is added to the list and we still\ndo work on it. The fix is to only add to the free list when we are done\nwith the allocation.\n\nAlso fix a problem where the usable size is computed incorrectly because\ntwo of the arguments where reversed.\n\nIn addition, add a check that the allocation being verified has the correct\ntag before trying to check the body of the allocation.\n\nAdd a test to catch the original failure.\n\nAdd a test for the tag being different.\n\nBug: 27601650\nChange-Id: Ie9200677d066255b8e668a48422f23f909f4ddee\n"
    },
    {
      "commit": "a4b14252752d14454afb48feb3272e8689e3a66d",
      "tree": "939fc4e7324147dd97d0e54d9383bb1758ec8848",
      "parents": [
        "0e00c168cea9c951df5ce47d25d8f042b9cc566a"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Mar 14 15:29:46 2016 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Mar 14 15:34:22 2016 -0700"
      },
      "message": "Fix problem where unknown option is not an error.\n\nIf the first option is found, then any unknown options are simply\nignored, but do not produce an error. Fixed this so that each\noption found is actually verified to exist.\n\nBug: 27620263\nChange-Id: If58732df3285eeae72188162c505e0e202fada8c\n"
    },
    {
      "commit": "7877df66c27c8cd27dcb809e5cbfdc38b798e5cb",
      "tree": "d77a82183c705cb4a0e2ebf290de217d86bc8af6",
      "parents": [
        "9567c7b82cba21d3046bab5c9b1fe4e73f2629bf"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Mar 10 13:01:27 2016 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Mar 10 14:53:02 2016 -0800"
      },
      "message": "malloc_debug: fix multiplication overflow in debug_calloc\n\nThe over flow check for nmemb * bytes in debug_calloc is incorrect,\nuse the builtin overflow functions to check for multiplication and\naddition overflow.\n\nChange-Id: I3f1c13102621bc5380be1f69caa88dba2118f3cb\n(cherry picked from commit 239838608dbe9917acddfe5a51d92350a4c8e135)\n"
    },
    {
      "commit": "9567c7b82cba21d3046bab5c9b1fe4e73f2629bf",
      "tree": "7804baf7adca1beafa840fdb020e1ffc50cd48be",
      "parents": [
        "baa7c6f307569ec3ed17688495e29000cd8bc617"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Mar 09 17:56:14 2016 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Mar 10 14:53:02 2016 -0800"
      },
      "message": "malloc_debug: round 0 byte allocations up to 1 byte\n\n0 byte allocations can cause problems if they are immediately followed\nby another allocation with no header, as both allocations will have the\nsame address.  Treat 0 byte allocations as 1 byte allocations so that\ndebug_iterate will return separate addresses for them.\n\nBug: 27578580\nChange-Id: Ia8dc3481fa7062391e9b3ae58a36e8d47e7ee557\n(cherry picked from commit 15af478080cfbfa800fb8172fdf70a84075925e3)\n"
    },
    {
      "commit": "baa7c6f307569ec3ed17688495e29000cd8bc617",
      "tree": "ae68b98d1ec02f896f0d7af99012710c1f3dee74",
      "parents": [
        "ffd19ee64d89d5a9ba3757e8ecb1017e0ec5f135"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Mar 09 16:33:44 2016 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Mar 10 14:53:02 2016 -0800"
      },
      "message": "malloc_debug: iterate: use usable_size\n\nmalloc_iterate with malloc debug enabled was returning allocation sizes\nusing the requested size instead of usable size.  If anything wrote\npointers above the requested size but below the usable size, those\npointers would be invisible to libmemunreachable and referenced\nallocations could be reported as a leak.\n\nBug: 27107100\nChange-Id: I6b19fd631f68ce93b3aee408cc3d296ec457bd01\n(cherry picked from commit b23c6606d2326f8835fc7fc35b23ff7ee5a48f48)\n"
    },
    {
      "commit": "549e52200b6af3c33cba7ef759ea98b49fa40082",
      "tree": "bf86a923f9e99668414f03f47b41f5493ef33072",
      "parents": [
        "eb727252f22bd533ebfd40637c0718fdc9946221"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Feb 22 19:23:26 2016 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Feb 26 17:02:17 2016 -0800"
      },
      "message": "Move hard-coded values to constants.\n\nChange all of the hard-coded config values to be defined constants.\nAlso make sure to use these constants in the usage output.\n\nBug: 26739265\nChange-Id: I597a6d71279a2df9cc7e98c42ac70224261bac99\n"
    },
    {
      "commit": "0e2a0265798ed47cbbf6977f0f84cf81d93173a6",
      "tree": "888f3e9a96e38769cddae99ce0b9eb2881aa5c4d",
      "parents": [
        "f2d516b3f9ef901991387ee473140ea24feaab48"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Feb 22 19:14:26 2016 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Feb 22 19:14:26 2016 -0800"
      },
      "message": "Fix wrong guard values for 64 bit.\n\nI added the code to force alignments of 8 for 32 bit and 16 for 64 bit,\nbut I missed a couple of tests that failed due to this change. Fix the\nfailing tests.\n\nBug: 26739265\nChange-Id: Ice9932d1419e59c07483c4c9fcdb84970844f0a6\n"
    },
    {
      "commit": "f499dc91e774db4cb9d21f9a7c34704fa9b7ed39",
      "tree": "ed129781e91ae6015f625930c4c5fdec19265356",
      "parents": [
        "b539baab398ce20f9add5d6dfbadfdc7abdeb970"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Feb 19 18:13:29 2016 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Feb 19 18:13:29 2016 -0800"
      },
      "message": "Fix incorrect size of array.\n\nWhen using sscanf and \"%4s\", the array passed in must include space for\na nul terminator.\n\nBug: 26739265\nChange-Id: I0140a6100ca370666ae61689087ba41b4914789d\n"
    },
    {
      "commit": "d75d4bea54a788dada3f2538a33cc491e4c56ed4",
      "tree": "2afb4a19e32539b11eda85948225ef456b4cf638",
      "parents": [
        "2c75991359df165ca7cc7a6213fb227c0b5ed87c"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Mon Feb 08 14:29:03 2016 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Feb 18 16:09:17 2016 -0800"
      },
      "message": "malloc_debug: reread /proc/pid/maps when entry is missing\n\nReread /proc/pid/maps on demand in case a new library has been loaded.\n\nChange-Id: Iac8109b3e6a07bf02c38300b21eecabf4bcd54df\n"
    },
    {
      "commit": "2c75991359df165ca7cc7a6213fb227c0b5ed87c",
      "tree": "4dc02df00481962e80acb454ee857fd5b2f8b2d4",
      "parents": [
        "2d4721c0c57fe2f7c1e1b40df4763a561b3cf856"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Feb 05 16:17:39 2016 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Feb 18 16:09:17 2016 -0800"
      },
      "message": "Add backtrace_string and export to libmemunreachable\n\nAdd backtrace_string to convert a malloc_debug backtrace to a string.\nAlso move the backtrace functions to libc_malloc_debug_backtrace so that\nlibmemunreachable can reuse them.\n\nChange-Id: I5ad67001c0b4d184903c762863a8588181d4873b\n"
    },
    {
      "commit": "2d4721c0c57fe2f7c1e1b40df4763a561b3cf856",
      "tree": "256b5519e32df5b56b6bc6a343f5ff50d16ddea0",
      "parents": [
        "869691c6f7691dd5bf343617aa185c32e0d3d160"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Tue Feb 02 11:57:54 2016 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Feb 18 16:09:16 2016 -0800"
      },
      "message": "Export malloc_backtrace\n\nChange-Id: Ic1adb4dfd86b9ca698443a36263a3df2c91edda3\n"
    },
    {
      "commit": "869691c6f7691dd5bf343617aa185c32e0d3d160",
      "tree": "aa0cb5619aa90a899a31ca0ba250cb180c5d1302",
      "parents": [
        "aca201358b910e5a4b925c639902387fbdfd9016"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Jan 29 12:48:18 2016 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Feb 18 15:05:38 2016 -0800"
      },
      "message": "Export malloc_iterate and friends\n\nExport malloc_iterate, malloc_enable, and malloc_disable to be used by\nlibmemunreachable.\n\nChange-Id: I08a50349af82a95d096b6b4cbac37ababe4b9b06\n"
    },
    {
      "commit": "598cb89790ba93edbb392c567ecda32b39d64ff1",
      "tree": "28f8dc579b1462a232620d180ab5f32a88f687f4",
      "parents": [
        "2de48bc809bba48a7f209e209b3822bad010166f",
        "7a28a3cf1f8df36e30724e8b4021cddde0596118"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Feb 17 20:38:02 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Feb 17 20:38:02 2016 +0000"
      },
      "message": "Merge \"malloc_debug: reset TrackData mutex after fork\""
    },
    {
      "commit": "72df6708c829a4c6494936fdfbda6dc7e68e647b",
      "tree": "17ede0d54b6f50c3598a3fcec56f50754067690d",
      "parents": [
        "72bca4b4105e24058f3f2eca024382bedb122a30"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Feb 11 15:51:31 2016 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Feb 12 17:30:30 2016 -0800"
      },
      "message": "Fix the default alignment of the allocations.\n\nIn order to enforce this constraint:\n\nThe pointer returned if the allocation succeeds shall be suitably\naligned so that it may be assigned to a pointer to any type of object\nand then used to access such an object in the space allocated.\n\nForce all allocations on 32 bit systems to have 8 byte alignment,\nand all allocations on 64 bit systems to have 16 byte alignment.\n\nAdd a test to verify that the allocator returns the correct alignments.\n\nBug: 26739265\nChange-Id: I9af53279617408676b94e4ec6481b3ed7ffafc6a\n"
    },
    {
      "commit": "7a28a3cf1f8df36e30724e8b4021cddde0596118",
      "tree": "2add78d5dcf97d4cb4f360fba7b512656be70313",
      "parents": [
        "9750a77b31f2fc6d548a02b3a9750c2794648fea"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Sun Feb 07 22:51:15 2016 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Fri Feb 12 16:41:14 2016 -0800"
      },
      "message": "malloc_debug: reset TrackData mutex after fork\n\nAdd a pthread_atfork handler to malloc_debug to lock the TrackData mutex\nduring fork and reset it in the child.  Ensures that the TrackData is\nconsistent when forking from a multi-threaded process, and that the\nmutex is in a defined state in the child.\n\nChange-Id: I0dfed30045a28551217ceac227d33b2e18894932\n"
    },
    {
      "commit": "701bb65511aed14da6c51179619785e5706fa5a6",
      "tree": "04cffebe6ad88578e7212d690318563b4bb3bfa5",
      "parents": [
        "4821db1b3ecc14828d4acf4abed26bb7d8b8cf6a"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Feb 02 13:09:59 2016 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Feb 02 13:22:40 2016 -0800"
      },
      "message": "Remove the unused TrackHeader structure.\n\nChange-Id: I07ae5de717e1fcfbe5dfe552a531db9f630da622\n"
    },
    {
      "commit": "7993b80f894db20af4d1d154221c42fea6171a3d",
      "tree": "fc99d36000a8f0853224d75296d96509a730ee05",
      "parents": [
        "50647711ebaf2360aca05cc94a2fdf431c1a153e"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Jan 28 18:35:05 2016 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jan 29 15:19:22 2016 -0800"
      },
      "message": "Add better free tracking.\n\nIncluded in this change:\n\n- Change the tag when a pointer is freed so it\u0027s easy to detect if\n  an already freed pointer is being used.\n- Move the free backtrace out of the header. This backtrace is only\n  used under only some circumstances, so no need to allocate space\n  in all headers for it.\n- Add new option free_track_backtrace_num_frames to specify how many\n  frames to record when the free occurs. This removes the dependency\n  on the backtrace option to get backtraces.\n\nBug: 26739265\nChange-Id: I76f5209507dcf46af67ada162a7cb2bf282116f2\n"
    },
    {
      "commit": "166c8535a5a4253bcb2b04bbd20a2a8c04c44f2c",
      "tree": "09ea8c0e5618aaee0434ad89b83c5ae05162642a",
      "parents": [
        "e4daf100b33fb17936b4d61e0ddfe679fcd04123"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jan 27 17:23:36 2016 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Jan 27 18:13:09 2016 -0800"
      },
      "message": "Add min/max values for config values.\n\nThis is to only allow realistic values for some of the options.\n\nBug: 26739265\n\nChange-Id: I172d5401c27e5d638d80f1c93c678c26c4dae0fc\n"
    },
    {
      "commit": "1e185a5056f85e281f699a92114b758591ae3b92",
      "tree": "86a88c43ee354e576535d5121d2250dc6412ccb8",
      "parents": [
        "f2b67b85f5e192812212d3176c07e195c0ffa503"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jan 25 17:23:38 2016 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jan 25 17:27:40 2016 -0800"
      },
      "message": "Fix gcc test issues.\n\nChange-Id: I2b26b779f5198c7c9362a452b971260a8852aa7b\n"
    },
    {
      "commit": "f2b67b85f5e192812212d3176c07e195c0ffa503",
      "tree": "e2630c9e80cd0fa29601c63272663842a5a12e9c",
      "parents": [
        "63860cb8fd1adf3f679b9b4ad876323a8d65cd9d"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jan 25 14:36:34 2016 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jan 25 14:36:34 2016 -0800"
      },
      "message": "Fix build for gcc.\n\nGcc doesn\u0027t like the brace object initialization, so make all of\nthe Feature objects explicit.\n\nAlso, no arguments to the error_log macros make gcc unhappy, so add\nan option to turn these into warnings. These will be fixed when we\nadd the explicit _error and _warn log functions.\n\nChange-Id: I35af834dabb5548923e893dd980a751fdebfa13a\n"
    },
    {
      "commit": "63860cb8fd1adf3f679b9b4ad876323a8d65cd9d",
      "tree": "25aeae686d92efcb5e08a54e8cba1e8c31efe33b",
      "parents": [
        "ad9c3f34f762ed45cce5dbb93218124ed31f6873"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Nov 16 17:30:32 2015 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Mon Jan 25 10:54:21 2016 -0800"
      },
      "message": "Malloc debug rewrite.\n\nThe major components of the rewrite:\n\n- Completely remove the qemu shared library code. Nobody was using it\n  and it appears to have broken at some point.\n- Adds the ability to enable/disable different options independently.\n- Adds a new option that can enable the backtrace on alloc/free when\n  a process gets a specific signal.\n- Adds a new way to enable malloc debug. If a special property is\n  set, and the process has an environment variable set, then debug\n  malloc will be enabled. This allows something that might be\n  a derivative of app_process to be started with an environment variable\n  being enabled.\n- get_malloc_leak_info() used to return one element for each pointer that\n  had the exact same backtrace. The new version returns information for\n  every one of the pointers with same backtrace. It turns out ddms already\n  automatically coalesces these, so the old method simply hid the fact\n  that there where multiple pointers with the same amount of backtrace.\n- Moved all of the malloc debug specific code into the library.\n  Nothing related to the malloc debug data structures remains in libc.\n- Removed the calls to the debug malloc cleanup routine. Instead, I\n  added an atexit call with the debug malloc cleanup routine. This gets\n  around most problems related to the timing of doing the cleanup.\n\nThe new properties and environment variables:\n\nlibc.debug.malloc.options\n  Set by option name (such as \"backtrace\"). Setting this to a bad value\n  will cause a usage statement to be printed to the log.\n\nlibc.debug.malloc.program\n  Same as before. If this is set, then only the program named will\n  be launched with malloc debug enabled. This is not a complete match,\n  but if any part of the property is in the program name, malloc debug is\n  enabled.\n\nlibc.debug.malloc.env_enabled\n  If set, then malloc debug is only enabled if the running process has the\n  environment variable LIBC_DEBUG_MALLOC_ENABLE set.\n\nBug: 19145921\n\nChange-Id: I7b0e58cc85cc6d4118173fe1f8627a391b64c0d7\n"
    }
  ]
}
