)]}'
{
  "log": [
    {
      "commit": "a4060e5fe4729fa30bde965efc35779690478fa4",
      "tree": "c1689d50ddc3914c64d53ca345157702cdd4e661",
      "parents": [
        "1f729aac2e3a4924d09cdb1a17f72ee2e22745b4"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 02 16:51:35 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 02 16:51:35 2012 -0800"
      },
      "message": "Fix a deadlock caused by my big threading change yesterday.\n\nAlso add even more locking diagnostics that catch this class of error and\nexplain what you\u0027ve done in clear terms. In this case:\n\n03-02 16:42:46.040 20768 20785 E art     : holding ThreadListLock while doing condition variable wait on ThreadSuspendCountLock\n...\n03-02 16:42:46.493 23421 23421 I DEBUG   :     #01  pc 00149e5f  /system/lib/libartd.so (art::Runtime::Abort(char const*, int)+338)\n03-02 16:42:46.493 23421 23421 I DEBUG   :     #02  pc 00113c0b  /system/lib/libartd.so (art::LogMessage::~LogMessage()+1026)\n03-02 16:42:46.493 23421 23421 I DEBUG   :     #03  pc 0015a723  /system/lib/libartd.so (art::Thread::CheckSafeToWait(art::MutexRank)+290)\n03-02 16:42:46.493 23421 23421 I DEBUG   :     #04  pc 0012481f  /system/lib/libartd.so (art::ConditionVariable::Wait(art::Mutex\u0026)+26)\n03-02 16:42:46.493 23421 23421 I DEBUG   :     #05  pc 001631fb  /system/lib/libartd.so (art::ThreadList::FullSuspendCheck(art::Thread*)+154)\n03-02 16:42:46.493 23421 23421 I DEBUG   :     #06  pc 00159ffd  /system/lib/libartd.so (art::Thread::SetState(art::Thread::State)+128)\n03-02 16:42:46.493 23421 23421 I DEBUG   :     #07  pc 00161bb5  /system/lib/libartd.so (art::ScopedThreadListLock::ScopedThreadListLock()+64)\n03-02 16:42:46.493 23421 23421 I DEBUG   :     #08  pc 00164a31  /system/lib/libartd.so (art::ThreadList::Unregister()+92)\n03-02 16:42:46.493 23421 23421 I DEBUG   :     #09  pc 0015e537  /system/lib/libartd.so (art::Thread::CreateCallback(void*)+230)\n03-02 16:42:46.493 23421 23421 I DEBUG   :     #10  pc 00013b08  /system/lib/libc.so (__thread_entry+48)\n03-02 16:42:46.493 23421 23421 I DEBUG   :     #11  pc 0001363c  /system/lib/libc.so (pthread_create+180)\n\nChange-Id: I9cdb770e766f63359ab7d11ee1993dd7a6fc1c90\n"
    },
    {
      "commit": "1f729aac2e3a4924d09cdb1a17f72ee2e22745b4",
      "tree": "c591f64fea660a410647adc82a3f08c160399efd",
      "parents": [
        "82488f563e7f72f8c626052893c1792d76ab3faf"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 02 13:55:41 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 02 13:55:41 2012 -0800"
      },
      "message": "Make diagnostic output more consistent.\n\nChange-Id: I3a2feb06fc0ef1db6b17ebd64c2241d94193a5d7\n"
    },
    {
      "commit": "ffb465f23d9549dd591e6aa62e9250523cb00233",
      "tree": "2108ba79a4ec8031faa56ef0806f93bc2217c237",
      "parents": [
        "71ac99485e79ad7eb1ba3ea2d404d53bb5784c13"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 01 18:46:05 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 01 21:15:36 2012 -0800"
      },
      "message": "libcorkscrew native stacks, mutex ranking, and better ScopedThreadListLock.\n\nThis change uses libcorkscrew to show native stacks for threads in kNative or,\nunlike dalvikvm, kVmWait --- working on the runtime directly I\u0027ve found it\nsomewhat useful to be able to see _which_ internal resource we\u0027re waiting on.\nWe can always take that back out (or make it oatexecd-only) if it turns out to\nbe too noisy/confusing for app developers.\n\nThis change also lets us rank mutexes and enforce -- in oatexecd -- that you\ntake locks in a specific order.\n\nBoth of these helped me test the third novelty: removing the heap locking from\nScopedThreadListLock. I\u0027ve manually inspected all the callers and added a\nScopedHeapLock where I think one is necessary. In manual testing, this makes\njdb a lot less prone to locking us up. There still seems to be a problem with\nthe JDWP VirtualMachine.Resume command, but I\u0027ll look at that separately. This\nis a big enough and potentially disruptive enough change already.\n\nChange-Id: Iad974358919d0e00674662dc8a69cc65878cfb5c\n"
    },
    {
      "commit": "ff7380681c50129ff689a11ac0f49512b4be7295",
      "tree": "79704a4b85026aae58c17780cd88377e8d5a3c08",
      "parents": [
        "9ada79cbe875dbcf7229b3f563303d21b0537d5f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 03 15:00:42 2012 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Feb 03 15:07:35 2012 -0800"
      },
      "message": "Fix a thread suspend timeout, and improve the diagnostics for thread suspend timeouts.\n\nI still needed gdb to understand this, but when we dump _native_ stacks, the\nadditional diagnostics here will be more helpful. (They\u0027re somewhat helpful\nanyway, in that they let you see the state all threads are in. Also, in a\nstarted runtime rather than the compiler, threads will have informative managed\nstacks.)\n\nAlso make the apparent duplication in the dex2oat timings clearer, and only\ninclude time spent on resolving strings if we resolved any strings.\n\nChange-Id: Icd469d9b085171ebb2dede2afb5140387cd3240c\n"
    },
    {
      "commit": "cd74c4b3a6893c876c6e03fd99a1264249653d80",
      "tree": "fd59dad11cb63ab6ff40be13e1572e1c2becab67",
      "parents": [
        "844f9a072454eb9dca1022299b6bf99ef4294008"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Jan 23 13:21:00 2012 -0800"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jan 25 11:07:15 2012 -0800"
      },
      "message": "Fix thread hang\n\n- Primary problem was ScopedThreadListLock was releasing heap lock in constructor instead of destructor\n- Secondary problem was ScopedThreadListLock should not be used with Mutex::Wait\n- Added Thread.getStackTrace case to ThreadStress that reproduces YouTube problem\n- Added Mutex::GetDepth and related methods that were useful in diagnoising this issue\n\nChange-Id: I1bdc7245e9b411378b98f4dcf498ad66eb96366d\n"
    },
    {
      "commit": "4dd9b4d95eec9db5338fb9bf132f9bb8facf6cf4",
      "tree": "f9dc6f6e6a55acea3a08f1f568ae6900c1dd7dd1",
      "parents": [
        "20a409c99a649a01cb7c65bd1089988445d8cdfd"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 12 18:29:24 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 13 08:23:08 2011 -0800"
      },
      "message": "Clean up verbose logging.\n\nChange-Id: I6b01980e7145c4f8d25a5b50f620903f61a1b427\n"
    },
    {
      "commit": "3d30d9b09c16542d41554aad9f46ec9109ba5cb5",
      "tree": "fecce7ca0ea5e1fe0f5a03b917ab036a4a33b3b0",
      "parents": [
        "486013193c94b4321414c28ce9251911e14a0599"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 07 17:35:48 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 07 17:46:46 2011 -0800"
      },
      "message": "Fix detaching a debugger while threads are suspended.\n\nThe interesting part of this change is in \"thread_list.cc\".\n\nI\u0027ve done a TODO in TagFromClass, but haven\u0027t seen it make any practical\ndifference in a debugger. I also tightened up the types in GetThreadStatus\nwhile investigating the fact that we report some threads as \"RUNNING, SUSPENDED\",\nwhich makes no sense until you realize that TS_RUNNING corresponds to both\nour kRunnable thread state and our kNative thread state, the latter of which\nmay actually be a suspended thread.\n\nI\u0027ve also made us fail faster in the \"address in use\" jdwp failure case,\nand tidied up a bunch of the capitalization in logging.\n\nChange-Id: I0fe705791d07db31c4615addce44da4fdfbfd0d1\n"
    },
    {
      "commit": "d07986fad0d08cdf05505cf9230714a2cf0dd9ae",
      "tree": "731b6abf2c2e0a5e51453a80029e1a9073b12354",
      "parents": [
        "7fe2c691866ad643b9e21dd2c9d36fa79ec454c3"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 06 18:27:45 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 07 09:16:24 2011 -0800"
      },
      "message": "Implement JDWP InvokeMethod and breakpoints on exception throwing.\n\nChange-Id: I1142bee843104f0850fd7270752104d5d73a44f0\n"
    },
    {
      "commit": "4e235316b4ada4d865c544d9b4ba397139333fa6",
      "tree": "bb9296420fe8ff9e44f1ddf4e95c8b5be08a1e9f",
      "parents": [
        "1bba14f20039b6e706b719fdd5754eb30088d014"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 02 11:34:15 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 02 11:34:15 2011 -0800"
      },
      "message": "Implement \"GetThreadGroupParent\", \"Suspend\", and \"Resume\".\n\nThis is enough to get the GUI jswat working for poking around\nthreads, stacks, and locals.\n\nChange-Id: Ib02d9666cee8d39c09e4a09cf3961cebff1768ac\n"
    },
    {
      "commit": "761928d24e4e7ed7776b52243eaf9095ad35f448",
      "tree": "62a9d0c880c5412050e3eabe73c106c5374555dc",
      "parents": [
        "a215526d5c789cbef0f81a1f9aba22541a841cca"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 16 18:33:03 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 17 09:55:08 2011 -0800"
      },
      "message": "Implement a bit more debugger functionality.\n\nThis fixes the deadlock by making SuspendSelfForDebugger not take the thread\nlist lock, making it more like the equivalent code in dalvikvm.\n\nThere\u0027s also some code cleanup, and a few more of the JDWP calls jdb makes\non startup. By fixing the deadlock, attaching jdb now causes us to hit\nunimplemented code relating to thread stacks. That\u0027s tomorrow\u0027s job...\n\nChange-Id: I7eac1b95946228fa60666587ff8766bcabb28bb1\n"
    },
    {
      "commit": "72db0d77d6c476c71c5bbaa14a80ca77f23a47f3",
      "tree": "81fad78f6c916426f4a8374284934e0c00f8623a",
      "parents": [
        "41df06566cdf8b4b01af8225a2c61509aaef57df"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Nov 10 17:58:56 2011 -0800"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Nov 10 17:58:56 2011 -0800"
      },
      "message": "Adjust stack size for system_server\n\nChange-Id: I926f07f911fdb78bc5d817ecf9a0820f463c49c8\n"
    },
    {
      "commit": "bbd9d830fe0eb8ce44405d7504dcf9a6fe91ffa1",
      "tree": "211747a79d87a2412c156e42713eea4638bbc340",
      "parents": [
        "c2f8006ede3d07ca53467fa73573bdbfb864a65e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 07 14:40:00 2011 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 07 14:40:00 2011 -0800"
      },
      "message": "Fix at least two deadlocks.\n\nPretty much every caller that takes the thread list lock can then go on to\ncause allocation, which requires the heap lock. The GC always takes the heap\nlock first and the thread list lock second (to suspend/resume other threads).\nCue deadlocks.\n\nThis patch is a pretty degenerate fix that basically makes the thread list\nlock irrelevant; we now always take the heap lock first.\n\nChange-Id: I0537cffb0b841bfb5033789817793734d75dfb31\n"
    },
    {
      "commit": "e0918556e7551de638870dcad3f2023f94f85a50",
      "tree": "b866a2b267124354ff2f46815d9870db7e093882",
      "parents": [
        "6a5bd495ff2f614f1495f652c86f3902d3bde537"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 28 17:18:29 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 28 17:34:47 2011 -0700"
      },
      "message": "Provide a convenience for logging types that don\u0027t have an operator\u003c\u003c.\n\nChange-Id: I650b852ded67576dc5ec7c8e57732cfb49f1ecd6\n"
    },
    {
      "commit": "47179f76e3f03fe3eb21dfb081d50733ca316371",
      "tree": "22300f10c4a07478be40653a50a59cc35dda8c0d",
      "parents": [
        "9876d923fd8867425b565ea12648506584c2bfb2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 27 16:44:39 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Oct 27 16:44:39 2011 -0700"
      },
      "message": "Better -verbose:thread logging, and revert a CHECK.\n\nGo back to the old scheme where we\u0027d just refuse to take a suspend count\nnegative. (Like dalvik.)\n\nChange-Id: I4d37189dff1ffc035a9b5d65d97710ef65ead2d3\n"
    },
    {
      "commit": "bfe487be25652c5456236661b9d9c3579d2296c1",
      "tree": "03e98cfc794946a85a5dfcc3170ae138f78da9b1",
      "parents": [
        "234ab15b00f8120282d1833e5d7480eca2e35a29"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 26 15:48:55 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 26 16:52:02 2011 -0700"
      },
      "message": "Makes objects known to the debugger GC roots, implements the THST message, and lets DDMS request stack traces.\n\nThis fills out correct data in all columns of the \"Threads\" table, and\ndouble-clicking on a thread shows that thread\u0027s stack.\n\nChange-Id: I48f63c3612e12d35269158dc3a283f07db28c8e7\n"
    },
    {
      "commit": "234ab15b00f8120282d1833e5d7480eca2e35a29",
      "tree": "80f30c5cc581a1522369ebbae3e81182aad89dfd",
      "parents": [
        "c37e9a5c68724d09539f0b6bc3e4877faa597b39"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 26 14:02:26 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 26 14:24:38 2011 -0700"
      },
      "message": "Implement Dbg::Disconnected and Dbg::UndoDebuggerSuspensions.\n\nYou can now start and stop oatexec-based apps with DDMS running, with\nno UNIMPLEMENTEDs.\n\nChange-Id: Ic53e7bdd4ddd3ed93f9d807499d991ea30f48810\n"
    },
    {
      "commit": "f28bc5b6df6edb4b22aeca360ff102a95f3155e1",
      "tree": "45249fe10034ae05b945abb400822c91133436ca",
      "parents": [
        "03ddf6b9355b29b90c955359e104bd247640fd8b"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Oct 26 01:15:03 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Oct 26 13:50:03 2011 -0700"
      },
      "message": "Callers of SuspendAll should be in the kRunnable state\n\nChange-Id: I37996164a5fd56251134683f717e6e00541cab22\n"
    },
    {
      "commit": "47fce01c0f27dba716fa6b97242562fbc5c26eea",
      "tree": "4a95d4bbc2a53ec765000e73cf026d404a667f73",
      "parents": [
        "ed6d78ed93c9b5b1988af6ca502a7e2eee0f2aaf"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 25 18:37:19 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 25 18:37:19 2011 -0700"
      },
      "message": "Basic DDMS thread support.\n\nDDMS can now see our running threads...\n\nChange-Id: I42d2fce4db9eb846fa0b4aac46ca6bb3443a6c9f\n"
    },
    {
      "commit": "f6a1e1e44b94221c4e6b063b36921c712a33910b",
      "tree": "868c28cb66e1a1d34dd4060592e48e1a598342ed",
      "parents": [
        "94e60fb48459f3173c8abd6afcee85df68ab1b55"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 25 16:28:04 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 25 16:28:04 2011 -0700"
      },
      "message": "Implement more DDMS support.\n\nYou can now launch DDMS without killing running oatexec processes...\n\nChange-Id: I13e1d6df4f0cbd0c06b69471823a13e4e820b93b\n"
    },
    {
      "commit": "475fc23a4a7f35d1be87ea0b06c80df317a720ac",
      "tree": "91954099b3f4168a4bb97613219d1f5e329c1597",
      "parents": [
        "6ba581a6711c4fed24828c9a294b1b49ac6bbb30"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 25 15:00:35 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Oct 25 15:00:35 2011 -0700"
      },
      "message": "More debugger support.\n\nThis gets us as far as the first DDMS-specific message, which means\nit\u0027s time to bring in a bunch more code.\n\nChange-Id: I3f9d75706d5ddde0aa21fcca558132282b94eff4\n"
    },
    {
      "commit": "4514d3c0e69a49f5dbe19138330a2bb2aee36d63",
      "tree": "f5bd420d6e5f1f2daeb418561c7adf016c161810",
      "parents": [
        "872d4ec7225444d9400d30f9027247deb91012fd"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Oct 21 17:01:31 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Oct 21 17:55:30 2011 -0700"
      },
      "message": "Fixes for ThreadStress test\n\n- Fix deadlock when ThreadGroup.remove(Thread) was run with\n  thread_list_lock_ but needed to GC to allocate an iterator\n- Fix ~MonitorList to clean ownership of any locks that might be held\n  by JNI or daemon threads on shutdown.\n\nChange-Id: I95e23c3b7c745f6a8387789949f3ec849458a27d\n"
    },
    {
      "commit": "4f20aef512500525b2255d4b0e6984fe3e4b5229",
      "tree": "bb11000101a82e839f093b35259c494981a95be3",
      "parents": [
        "6fbb516c44bc5a99dbfc52678d51ea5da507dbf5"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Oct 21 00:16:18 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Oct 21 00:18:03 2011 -0700"
      },
      "message": "Generalizing TryLock pattern to ThreadListLocker\n\nChange-Id: Icfe05fac35f72e59bc8d6ec5805020fff3c082d2\n"
    },
    {
      "commit": "6fbb516c44bc5a99dbfc52678d51ea5da507dbf5",
      "tree": "78dd7a895c69d087cf8b713277c444911b917a5d",
      "parents": [
        "e6b1741b7489f3fcd24e3cb3c88adccb93521f3a"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Oct 20 20:55:38 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Oct 20 20:56:01 2011 -0700"
      },
      "message": "Address two ThreadList deadlocks\n\nChange-Id: Ibd40ef6dda75a2bebc8a17a3e03053dc42662041\n"
    },
    {
      "commit": "24a3c2e9924e8765c4a9b4d383cb8f3b922f9c9f",
      "tree": "1f61ecb377be4abcba4838651bc9d98b548a3f81",
      "parents": [
        "3535c22d05bb4600255db90b490e625eda874b53"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Oct 17 18:07:52 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Oct 17 18:17:36 2011 -0700"
      },
      "message": "ClassLinker changes\n\n- Add ClassLinker::LockOwner for SignalCatcher\n- ClassLinker::ResolveMethod now sets CodeAndDirectMethod when code is available\n\nChange-Id: I404b80d1994808e018d00e0b30e8ba4f9d08fecc\n"
    },
    {
      "commit": "accd83d1523545ac69bafd38e72a7d5cff8e2fac",
      "tree": "1bad139a9b741483e34adc23b249e9f7fd1b6913",
      "parents": [
        "6f7c958469d9b5a44ca2472058961a13d437b7bf"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 17 14:25:58 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 17 14:25:58 2011 -0700"
      },
      "message": "Fix a heap lock/thread list lock deadlock.\n\nWe had an uncaught OOME whose uncaught exception handler -- running\nwith the thread lock held -- was trying to cause a GC while some\nother thread had the heap lock and was waiting for the thread list\nlock.\n\nChange-Id: I22177129562268837127d9edcc63ef5e93054bdf\n"
    },
    {
      "commit": "14357e842b611279d467b64d450c569af33a6936",
      "tree": "1160c2071afdde8cbf3d9eee2ea3b12a0bc98d03",
      "parents": [
        "c0dd312b4ae5d11c59145f86a327c799877fbf53"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Sep 26 10:42:15 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Sep 26 10:42:15 2011 -0700"
      },
      "message": "Add a -verbose:thread option.\n\nChange-Id: Ie9bbe2195d7c427379e4a27d3fe51f1a71e58597\n"
    },
    {
      "commit": "7a3aeb4d7580164c6a6905c63b96823b77ff5a64",
      "tree": "be2ab3919e39b1a96c36ca138bfc9af63005107c",
      "parents": [
        "15fdb8cfb5b2e3fc882113ec0648d492cebf852c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sun Sep 25 17:39:47 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sun Sep 25 17:39:47 2011 -0700"
      },
      "message": "Thread state fixes.\n\nAttaching a native thread should give you a thread in the kNative state.\nTo be able to run managed code when a thread detaches, we need to be in\nthe kRunnable state.\n\nChange-Id: I9c8048469d0e2d2a53e8fd85261975bbffe16b4f\n"
    },
    {
      "commit": "cbba6ac9bf9a6c630a7aafae6d8767b5ddbb6fd5",
      "tree": "c0d4c56f7062c95100ea644fbf3385b9c09c8399",
      "parents": [
        "98fb41647a5664922a196fd1f6b343e6bad8e51e"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Sep 22 16:28:37 2011 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Sep 22 16:42:02 2011 -0700"
      },
      "message": "Implement stub for initialize static storage base.\n\nAlso fix a race in thread list.\n\nChange-Id: Ice35c2fa14e7a9a0585e89d558815ab99bbdd6b9\n"
    },
    {
      "commit": "01158d7a57c8321370667a6045220237d16e0da8",
      "tree": "f62e0bef39f7f04c969327f6a8540d7cff6e373d",
      "parents": [
        "6699709cf27b706b5221527d9815dd9365911710"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Sep 19 19:47:10 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Sep 20 11:48:27 2011 -0700"
      },
      "message": "Implement most of VMStack and some of Zygote.\n\nChange-Id: I07e18259a0452a2a9b077148f4f1ca67d3f63427\n"
    },
    {
      "commit": "038a806df72f884d22283a84a31c9a1d35ba1fdf",
      "tree": "c980ef0f8dbfb35dfedcd9faa0804df3f3e03f84",
      "parents": [
        "3101efb8f0e02fcfa70229c15631755cad758536"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sun Sep 18 14:12:41 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sun Sep 18 14:12:41 2011 -0700"
      },
      "message": "Thread.join, GC daemons, suspend daemons on shutdown, and wait for non-daemon threads to exit.\n\n(I\u0027ve been testing with a modified SystemMethods test that does various thread\noperations.)\n\nChange-Id: I3087087546f90c43da7a0e63fae918ff0a6e7005\n"
    },
    {
      "commit": "5f79133a435ebcb20000370d56046fe01201dd80",
      "tree": "974c4610e30e8cc950e6e461e66b939361cb2bbe",
      "parents": [
        "78128a63b2615744760b7f8ab83df9764a5d4a95"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 15 17:45:30 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 16 10:56:44 2011 -0700"
      },
      "message": "Implement monitors.\n\nChange-Id: Ifc7a801f9cbcdfbc1e1af5c905261dfadaa60f45\n"
    },
    {
      "commit": "8d768a954b101a9532f980253ac46be2c53aba11",
      "tree": "ba6fa0be68a2289d5de3eb6c4de6fe93f6cd858a",
      "parents": [
        "43a364291dcdfe08e530e9568748359735dd7442"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 14 16:35:25 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Sep 14 16:35:25 2011 -0700"
      },
      "message": "Thread suspension.\n\nIncludes SuspendAll/ResumeAll, and uses them in Heap and SignalCatcher.\n\nChange-Id: Ie39b868ca5961f5016f367acade5071392bb723e\n"
    },
    {
      "commit": "93e74e8d879270071c3aa163f8495ada8d21f42f",
      "tree": "6efbb3203ab055168a613df128f7742edb3c0e29",
      "parents": [
        "c74255fffb035001304c9a058a2e730a5a1a9604"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Sep 13 11:07:03 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Sep 13 11:34:52 2011 -0700"
      },
      "message": "More of the thread infrastructure.\n\nWe can now run managed code on multiple threads.\n\nChange-Id: Ia4ce9c94602773db238c967c15194a6db780d12f\n"
    },
    {
      "commit": "8daa0929f08a3080ea64dbd4e997e72f411e6fc9",
      "tree": "cecee23131d5e0357c17c44bcccc7ddcfb31b925",
      "parents": [
        "4b620ffb1b4d0c96a94bb3afe314f35d53990ec6"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sun Sep 11 13:46:25 2011 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sun Sep 11 14:01:57 2011 -0700"
      },
      "message": "More threads work.\n\nAdds stubs (and sometimes implementations) for dalvik.system.VMStack and\njava.lang.Thread native methods. There was a bug in the dalvik\nthread priority setting code, where the current thread and the passed-in\nthread were confused.\n\nI\u0027ve also pulled Mutex and ThreadList out into their own files, and\nmoved some functionality around (with the aim of having more stuff\nprivate, especially locks).\n\nChange-Id: Ieb0f22669cac3df44ca34f7868f8e7d4dfa09ab6\n"
    }
  ]
}
