)]}'
{
  "log": [
    {
      "commit": "2cbf5915385eb975e1cb07eb4605cd9a4f56f3c7",
      "tree": "c0a4340a56123095a1cbbf1a55faae122233439c",
      "parents": [
        "5da37beb8fee3903e26f2f59e7d246cd9fe963b5"
      ],
      "author": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Mon Oct 07 17:18:35 2024 -0700"
      },
      "committer": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Thu Oct 10 20:57:14 2024 +0000"
      },
      "message": "Add documentation\n\nDocument root/unroot, debug tips, asocket internals, and delayed acks.\n\nTest: NA\nBug: NA\nChange-Id: I5f46cf4cf42b75d6d21fbf87b21688796f1a8fbe\n"
    },
    {
      "commit": "d4610615d63f064e3ae1021528b14bcd2ce75093",
      "tree": "44a05af8ce55e57ba4cc7b09755000f60e98e0ba",
      "parents": [
        "1261c8f793932a4dc19fef12bfeda2f15e4cb542"
      ],
      "author": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Wed Sep 18 12:38:30 2024 -0500"
      },
      "committer": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Wed Sep 18 12:38:30 2024 -0500"
      },
      "message": "Code cleanup\n\n- Delete unused define\n- Delete obsolete comment\n\nTest: NA\nBug: NA\nChange-Id: I1b66fca925fb27a36ceff557091a1b9ddf092bb2\n"
    },
    {
      "commit": "e3958500e5312daac89c87c7bfc39ffbb624095e",
      "tree": "f7303b663a3cc3f2a9e32c4d2dd45952b6fe6f81",
      "parents": [
        "47870f582a89e3a42795ce5abf074b03a8a80890",
        "b69c59c202ebffad14fde0afb85ea17cb8c069ba"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Sep 13 00:39:33 2022 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Sep 13 00:39:33 2022 +0000"
      },
      "message": "Merge \"Convert int-as-a-bool to actual bool\""
    },
    {
      "commit": "b69c59c202ebffad14fde0afb85ea17cb8c069ba",
      "tree": "84f7c2549caf81c3e631ba02a77276ff7fbf3ca0",
      "parents": [
        "27025b8900aef31bd5bf6f59d31d0db18c035991"
      ],
      "author": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Mon Sep 12 09:38:19 2022 -0700"
      },
      "committer": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Mon Sep 12 15:58:01 2022 -0700"
      },
      "message": "Convert int-as-a-bool to actual bool\n\nUsing an integer to represent a boolean is likely an artifact from the\ntime where adb was written in C. The older trace of \"closing\" can be\nfound in the original 2009 git import.\n\nhttps://android.googlesource.com/platform/system/core/+/dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0/adb/adb.h\n\nTest: Existing unit tests\nBug: NA\nChange-Id: I7fc6fca7c36a3db6ab287428699aa3316414f6b8\n"
    },
    {
      "commit": "47870f582a89e3a42795ce5abf074b03a8a80890",
      "tree": "e729fb048f02832a6c5377cc77c3a3f9a0dcf430",
      "parents": [
        "85dbfc53624abe1a01cd814d18b285ba1422a4ba",
        "727a1b31f877152e5657941250d3acb46327e274"
      ],
      "author": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Mon Sep 12 20:59:43 2022 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 12 20:59:43 2022 +0000"
      },
      "message": "Merge \"Add documentation to asocket\""
    },
    {
      "commit": "36be8b05ad08f626006ed40ee48119947a591eaa",
      "tree": "9af95fc51368a8ae62a3930110a8dbfc9959c59c",
      "parents": [
        "27025b8900aef31bd5bf6f59d31d0db18c035991"
      ],
      "author": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Mon Sep 12 09:52:51 2022 -0700"
      },
      "committer": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Mon Sep 12 09:52:51 2022 -0700"
      },
      "message": "Fix half-boolean\n\nInitialize bool field with \"false\" instead of \"0\".\n\nTest: Covered by unit tests.\nBug: NA\nChange-Id: If0c96458704b2d42125d73f6b8bc94648a6fc7fd\n"
    },
    {
      "commit": "727a1b31f877152e5657941250d3acb46327e274",
      "tree": "a04462b82b7bed59f5e061a766eef5367a929f69",
      "parents": [
        "27025b8900aef31bd5bf6f59d31d0db18c035991"
      ],
      "author": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Wed Sep 07 16:16:07 2022 -0700"
      },
      "committer": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Mon Sep 12 09:52:01 2022 -0700"
      },
      "message": "Add documentation to asocket\n\nAsocket is not straight forward to understand. This CL adds a bit of\ndocumentation and group fields by type of socket they belong to.\n\nIt pave the way to the next CL which turns asocket into a class\nleverating polymorphism.\n\nBug: NA\nTest: NA\nChange-Id: I8f460698a9b073d1172ff6e44e2855eb88ba87b7\n"
    },
    {
      "commit": "bd1f30085774660e01d83cb74e326d79d55062d2",
      "tree": "ed19cdd7d0df5fb0a87543fec04e9c3078a05c29",
      "parents": [
        "17b638c32418194eb7ec81bc2de37bf2eb838089"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@fb.com",
        "time": "Wed Dec 29 21:15:12 2021 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@fb.com",
        "time": "Mon May 23 15:26:01 2022 -0700"
      },
      "message": "adb: add receive windowing.\n\nThe adb protocol struggles when used over long fat pipes, because the\na writer must wait for the receiver to acknowledge a write before it can\ncontinue writing data. For example, a connection with infinite\nbandwidth, but 50ms of latency is limited to 20MBps of throughput.\n\nWe still need some sort of acknowledgement, to be able to supply\nbackpressure. Take an initial stab at addressing this issue by\nimplementing receive windowing, which lets the writer know how many\nmore bytes it can write. Repurpose the unused field in A_OPEN to set the\ninitial window size, and add a payload to A_OKAY packet that\nacknowledges a specified number of bytes.\n\nTest: with adbd running on a separate machine connected with 10GbE:\n  [jmgao@atlas:~]# sudo tc qdisc replace dev lan root netem delay 50ms\n  [jmgao@atlas:~]$ ./adb kill-server \u0026\u0026 ADB_DELAYED_ACK\u003d0 ./adb connect 192.168.0.152:5555 \u0026\u0026 ./adb push 1g.bin 1g.bin\n  * daemon not running; starting now at tcp:5037\n  * daemon started successfully\n  connected to 192.168.0.152:5555\n  1g.bin: 1 file pushed, 0 skipped. 19.1 MB/s (1073741824 bytes in 53.685s)\n\n  [jmgao@atlas:~]$ ./adb kill-server \u0026\u0026 ADB_DELAYED_ACK\u003d1 ./adb connect 192.168.0.152:5555 \u0026\u0026 ./adb push 1g.bin 1g.bin\n  * daemon not running; starting now at tcp:5037\n  * daemon started successfully\n  connected to 192.168.0.152:5555\n  1g.bin: 1 file pushed, 0 skipped. 475.4 MB/s (1073741824 bytes in 2.154s)\nChange-Id: I6498d18e5ab4d866a81bf4d5c3d65cebb579c059\n"
    },
    {
      "commit": "65d18e2c1cc48b585811954892311b28a4c3d188",
      "tree": "eecf14e167f3453cf7135215faeaffa2b7e4d868",
      "parents": [
        "b085177e9cd07a8b050cb7615e068327912b95ff"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Apr 22 20:57:26 2020 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Apr 27 14:38:28 2020 -0700"
      },
      "message": "adbd: avoid compiling more code in the daemon.\n\nStrip out more code that has no meaning on device, to \"improve\"\ncoverage.\n\nTest: test_device.py over TCP\nChange-Id: Id8d9fa6cc6c6c30773f67303bcc89e6d60824700\n"
    },
    {
      "commit": "b51193a16a5be0da7f86c9b190825687e35ff345",
      "tree": "4fbf256ce42a18d7533a38ca4371bd871ed0c0a0",
      "parents": [
        "8c1cb8779b968e4ab948a4e96e4b474eb8e0dee8"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jun 28 13:50:37 2019 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Jul 08 14:37:27 2019 -0700"
      },
      "message": "adb: move fdevent to its own folder.\n\nPreparatory refactoring for platform-specific implementations.\n\nTest: mma\nChange-Id: I0f600122ac89241788c5f3300f362fd9ef02ddcd\n"
    },
    {
      "commit": "c2705969e945b115ca42bc6365e90383f5c078b6",
      "tree": "56eda95c2736e1494bbc1362d8ad964607b4899c",
      "parents": [
        "0560feb3bc387398394aa86b5066624f183cd97e"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jan 23 15:36:42 2019 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jan 23 17:11:13 2019 -0800"
      },
      "message": "adb: convert more stuff to unique_fd.\n\nTest: adb_test\nTest: adbd_test\nTest: test_device.py\nChange-Id: Ie75f0b811d2c75d508e6ecffb40579308f5789d0\n"
    },
    {
      "commit": "4a037e2f8d047955f9e94eaaad9641110399657c",
      "tree": "51c1f234a3ef272dbcaeab871d191a6935c00f93",
      "parents": [
        "8d49e121e3c7363b24bfb52d8f029b67f67bd4a2"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Dec 20 17:00:13 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Dec 26 11:48:14 2018 -0800"
      },
      "message": "adb: switch connect_to_remote to string_view.\n\nTest: test_adb.py\nTest: test_device.py\nTest: $ANDROID_HOST_OUT/nativetest64/adb_test/adb_test\nTest: adb shell /data/nativetest64/adbd_test/adbd_test\nChange-Id: Icce121a4c62bf0fa636a35bcae31d057cdff8fd2\n"
    },
    {
      "commit": "8d49e121e3c7363b24bfb52d8f029b67f67bd4a2",
      "tree": "3f7fea2ad6f8e51ecca81f58938443910a85f3d3",
      "parents": [
        "4219a7bb1a1d49771b58f5e018caad0f3001debd"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Dec 19 13:37:41 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Dec 26 11:48:14 2018 -0800"
      },
      "message": "adb: switch skip_host_serial to string_view.\n\nRename it to something more appropriate, while we\u0027re at it.\n\nTest: test_adb.py\nTest: test_device.py\nTest: $ANDROID_HOST_OUT/nativetest64/adb_test/adb_test\nTest: adb shell /data/nativetest64/adbd_test/adbd_test\nChange-Id: I0f95d348eeacb45a810696d748c8340d2068f666\n"
    },
    {
      "commit": "6dbf579e448b1d25eba03ede5cfcebb5e3c5e080",
      "tree": "e785ec4d592e909ce4794a1cdd790722e36c1b48",
      "parents": [
        "ab9958e27fafbbc11fe5b2a120aad9eed664967d"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Dec 13 14:21:00 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Dec 21 11:53:27 2018 -0800"
      },
      "message": "adb: finish switching service creation to string_view.\n\nTest: test_adb.py\nTest: test_device.py\nTest: $ANDROID_HOST_OUT/nativetest64/adb_test/adb_test\nTest: adb shell /data/nativetest64/adbd_test/adbd_test\nChange-Id: If4ea92aee1c0264d946de72483f8d715d96fcfd8\n"
    },
    {
      "commit": "9f155db0acfb164528e7d676241228c0a167d692",
      "tree": "19f9b70990198af6ff783c001beb846a0e8bb2ac",
      "parents": [
        "2cf03a369e864926ab91f985e1892a6584679492"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Apr 03 14:37:11 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed May 23 11:26:04 2018 -0700"
      },
      "message": "adb: add IOVector.\n\nAn IOVector is a collection of immutable reference counted blocks which\ncan have its head detached at an arbitrary index. This is extremely\nuseful for implementing packet-framed protocols like adb on top of a\nstream protocol like TCP: a stream reader can read blocks, append them\nto the end of the IOVector, and then pull packets off of the front.\nThis also lends itself naturally towards scatter/gather I/O, which will\nenable us to read data from disk and send it across the wire with a\ntheoretical minimum number of copies in USB, and one extra copy over\nTCP.\n\nSince this is basically a generalization of std::deque\u003cRange\u003e, delete\nRange and replace its uses with IOVector.\n\nTest: adb_test\nTest: wine adb_test.exe\nChange-Id: I06561ad0bb25a3a51b378b61d257b5b04b41d9c4\n"
    },
    {
      "commit": "9528df2055f2edc7257664079da416313b69a6ab",
      "tree": "ffa6e77f4f0f45df4f0373d8089a68ef34feb401",
      "parents": [
        "c83885027b5affad61ebe550ed57141017bbda18"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon May 14 11:14:33 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue May 22 14:54:49 2018 -0700"
      },
      "message": "adb: remove fdevent_install, fdevent_remove.\n\nRemove fdevent_install and fdevent_remove in favor of using\nfdevent_create and fdevent_destroy, so that we can put RAII types (i.e.\nunique_fd) into fdevent without worrying about -Wexit-time-destructors\nor structs that are freed instead of deleted.\n\nBug: http://b/79786774\nTest: python test_device.py\nChange-Id: I8471cc00574ed492fe1b196944976cdaae8b7cff\n"
    },
    {
      "commit": "ebc1c31c1df098e7c24226c065b9992b776c0b0f",
      "tree": "97606e03261beb63728febaaac7634d6a98ad6ab",
      "parents": [
        "caeda2c570d1f33beb9c21f3a2fcd1cf62362c8c"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Apr 13 12:17:03 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Apr 13 14:25:28 2018 -0700"
      },
      "message": "adb: fix `adb reverse` when adbd has multiple transports.\n\nPlumb the transport that we received the adb reverse request on through\nto reverse_service, instead of trying to get a unique transport on\ndevices that have multiple active transports (e.g. a device with USB\n(even unplugged) connected via TCP).\n\nBug: http://b/37066218\nBug: http://b/71898863\nTest: `echo foo | nc -l 12345 \u0026 adb reverse tcp:12345 tcp:12345; adb shell nc localhost 12345` on a device connected via TCP\nChange-Id: Iae199ae787f2e344126bbcacca8544cfc9844a4c\n"
    },
    {
      "commit": "cd2a5290137e1d55f6f16163ac58f39f28e40b00",
      "tree": "c4150b28fecf93e1d7e05f0f7825127643802305",
      "parents": [
        "83d33f8f516fe1730d940fa850aed0b7120e72a2"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Mar 07 16:52:28 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Apr 11 12:54:07 2018 -0700"
      },
      "message": "adb: switch apacket payload to a type that doesn\u0027t initialize its contents.\n\nSwitch from using std::string as the type we use to hold our payload in\napacket to a custom reimplementation that doesn\u0027t zero initialize. This\nimproves bulk transfer throughput in the adb_benchmark microbenchmark\non walleye by ~20%.\n\nTest: adb shell taskset f0 /data/benchmarktest64/adb_benchmark/adb_benchmark\nChange-Id: Ibad797701eb1460c9321b0400c5b167b89b2b4d0\n"
    },
    {
      "commit": "462b1507d44ca67d69d59e864ad871be5618e5ca",
      "tree": "b7e31b6711e5bf0903ea2434863271e6de078ced",
      "parents": [
        "5cb76ce6296a585cf7c9c4a197816704ed2b7e37"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Feb 12 18:03:49 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Feb 12 18:03:49 2018 -0800"
      },
      "message": "adb: fix build breakage.\n\nTest: mma\nChange-Id: Id8e7ffd2212449bbac5b64b50e7b3aef7e97d649\n"
    },
    {
      "commit": "5cb76ce6296a585cf7c9c4a197816704ed2b7e37",
      "tree": "cba87036f3eb4a2b0409f766ddaf432505eba919",
      "parents": [
        "4b7b3e7ff5b5e26943279e0d0351154e1bf823ae"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Feb 12 17:24:00 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Feb 12 17:31:39 2018 -0800"
      },
      "message": "adb: use delete on objects with destructors.\n\nasocket has a destructor now, so we have to delete it, or leak the\ndata pointed to by its std::string.\n\nBug: http://b/73257049\nTest: manual testing with asan\nChange-Id: Ia88199292cc74e10032a9a16226d3afc61c3e0be\n"
    },
    {
      "commit": "a7d9d71e8c66bd19cb908b48b5dac31c9587dd31",
      "tree": "dc72b7032b6e0923b6201273caaf64a5557410f3",
      "parents": [
        "b14756a7754dbb46d6f7d0a7814b0bcc61741e67"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Feb 01 13:17:50 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Feb 06 12:59:06 2018 -0800"
      },
      "message": "adb: switch asocket::enqueue to std::string.\n\nSwitch asocket over to taking a std::string instead of apacket* for\ndata. This allows us to remove asocket specific fields from apacket*.\n\nTest: python test_device.py with x86_64 emulator, walleye\nTest: adb_test on host\nChange-Id: I9d157ff331a75ba49a54fdd4194e3f6cdff722f4\n"
    },
    {
      "commit": "2b3db9e35c05c2653bb92c277ebe42f6fb322803",
      "tree": "bdd7bfc9a3bbe43fbfb13ab98314a31d406f9199",
      "parents": [
        "395b86a8a087416969f76b62915cccab2e5b5f7d"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jan 31 13:15:51 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Feb 06 12:59:06 2018 -0800"
      },
      "message": "adb: switch asocket\u0027s intrusive linked list to vectors.\n\nTest: python test_device.py\nChange-Id: I24d7f5d0401de77d80c7a2dd5a7dcb551943342d\n"
    },
    {
      "commit": "2f8da95b8de46be3df41835a076ea9d09ca99c51",
      "tree": "e50dbf6e3e0efc4c5fddc097a042bdee0cf0aa31",
      "parents": [
        "62da8b26e2e9b6842ad8d10868e4e1be55a66392"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Sep 12 13:23:33 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Sep 13 14:05:21 2017 -0700"
      },
      "message": "adb: reformat comments.\n\nTest: none\nChange-Id: Ib484f701f66cdb57f303dbd6d5eb2e5a15abdc0e\n"
    },
    {
      "commit": "ca35e9e2ea42ad3aec7ae85a65bfd802bd1019be",
      "tree": "d075772515e4289ccb94df1fa776aae45247d42d",
      "parents": [
        "a6c02429549f2e83e6fe569f5d672959a4afa66b"
      ],
      "author": {
        "name": "Dan Austin",
        "email": "danielaustin@google.com",
        "time": "Mon Mar 28 15:32:37 2016 -0700"
      },
      "committer": {
        "name": "Dan Austin",
        "email": "danielaustin@google.com",
        "time": "Tue Mar 29 17:17:51 2016 +0000"
      },
      "message": "Address const issues in preparation for libcxx rebase.\n\nChange-Id: I4eccc1b5a70da9dd325e1a7e10ab0a3fe588c03f\n"
    },
    {
      "commit": "c929c6f3d90517cded78b65d0ee97d2fa2bf3572",
      "tree": "135f4a05ee5764b01bd22a0b00a4eeeb963d71b0",
      "parents": [
        "edab9d1519aa3a68f567e2033f783e8bda4719ce"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Mar 01 08:58:26 2016 -0800"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Wed Mar 02 12:54:58 2016 -0800"
      },
      "message": "adb: relax serial matching rules.\n\nCurrently targeting a device by serial requires matching the serial\nnumber exactly. This CL relaxes the matching rules for local transports\nto ignore protocol prefixes and make the port optional:\n  [tcp:|udp:]\u003chostname\u003e[:port]\n\nThe purpose of this is to allow a user to set ANDROID_SERIAL to\nsomething like \"tcp:100.100.100.100\" and have it work for both fastboot\nand adb (assuming the device comes up at 100.100.100.100 in both\nmodes).\n\nThis CL also adds some unit tests for the modified functions to make\nsure they work as expected.\n\nBug: 27340240\nChange-Id: I006e0c70c84331ab44d05d0a0f462d06592eb879\n"
    },
    {
      "commit": "2ce9d5611924f64fa7dadace825d2805373aba64",
      "tree": "78c34b929c2959c5471dc504423ca244d1b764c5",
      "parents": [
        "4d4961f418cec8639a90ed23ada89f84eff5c6ec"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Sep 15 16:27:09 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Sep 16 15:00:59 2015 -0700"
      },
      "message": "Add unit tests for local socket.\n\nAdd has_write_error flag in asocket, so it will not wait on local_socket_closing_list\nto write pending packets in local_socket_close(). Although it doesn\u0027t fix any problem,\nit helps to make the code more stable.\nAdd a missing put_apacket() in error handling.\nAdd a check when adding local socket in local_socket_closing_list.\n\nBug: 23314034\n\nChange-Id: I75b07ba8ee59b7f277fba2fb919db63065b291be\n"
    }
  ]
}
