)]}'
{
  "commit": "74285a6e31c515a0dab881ac94933a3a239ce931",
  "tree": "dfd94df98879c254f33db9043509bc5a80ec8c36",
  "parents": [
    "8144a299661b36850950c12d24003c6ab2ea32d8"
  ],
  "author": {
    "name": "Vyacheslav Egorov",
    "email": "vegorov@google.com",
    "time": "Wed Jun 07 09:49:35 2023 +0000"
  },
  "committer": {
    "name": "Commit Queue",
    "email": "dart-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Wed Jun 07 09:49:35 2023 +0000"
  },
  "message": "[io] Take pending writes into account in _SocketStreamConsumer\n\nOn Windows `_NativeSocket.nativeWrite` returning to caller does\nnot mean that the data was flushed into OS buffer. Overlapped\noperation might still be in progress - and it will be cancelled\nwith data loss if we close the handle.\n\nThis means _SocketStreamConsumer should take such pending writes\ninto account and not issue `done` event until pending write\ncompletes.\n\nThis change prevents data loss when communicating with\nsubprocesses on Windows. Previously even doing\n`await process.stdin.flush()` would not guarantee data\ndelivery.\n\nFixes https://github.com/dart-lang/sdk/issues/50904\n\nTEST\u003dtests/standalone/io/regress_50904_test.dart\n\nCq-Include-Trybots: luci.dart.try:vm-win-release-x64-try,vm-win-debug-x64-try,pkg-win-release-try\nChange-Id: I13ab2cc3ce45f1ff8cb3183884d26bbb2b72f7ac\nReviewed-on: https://dart-review.googlesource.com/c/sdk/+/307043\nReviewed-by: Brian Quinlan \u003cbquinlan@google.com\u003e\nCommit-Queue: Slava Egorov \u003cvegorov@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "8c0d433f0dede15c5f6847bcc73571c956b71567",
      "old_mode": 33188,
      "old_path": "runtime/bin/io_natives.cc",
      "new_id": "d90a4b4f05258ae38515976bf59f53bf8c203a69",
      "new_mode": 33188,
      "new_path": "runtime/bin/io_natives.cc"
    },
    {
      "type": "modify",
      "old_id": "d441945cabe6553916eb118dcab741cd2e8f522b",
      "old_mode": 33188,
      "old_path": "runtime/bin/socket.cc",
      "new_id": "cd97a14b4e0c84aa9db33bd609d8e47a9e0661e3",
      "new_mode": 33188,
      "new_path": "runtime/bin/socket.cc"
    },
    {
      "type": "modify",
      "old_id": "2e0a74fc7cd243f2eb9fb7f8d3c4359d8e25d3fb",
      "old_mode": 33188,
      "old_path": "runtime/bin/socket_base.h",
      "new_id": "bbc141ed7ca04f820858467a903eadae2f386f43",
      "new_mode": 33188,
      "new_path": "runtime/bin/socket_base.h"
    },
    {
      "type": "modify",
      "old_id": "728a03049edcd12c7546b36458a64914b4143d8f",
      "old_mode": 33188,
      "old_path": "runtime/bin/socket_base_win.cc",
      "new_id": "ca91f43c4f09bac20513e37a887ffefe64171f38",
      "new_mode": 33188,
      "new_path": "runtime/bin/socket_base_win.cc"
    },
    {
      "type": "modify",
      "old_id": "2a384fd6718d3ecf536536985cac0f6ecbe7562f",
      "old_mode": 33188,
      "old_path": "sdk/lib/_internal/vm/bin/socket_patch.dart",
      "new_id": "cc5b2af41fd54404110a002906727afaa2d8af75",
      "new_mode": 33188,
      "new_path": "sdk/lib/_internal/vm/bin/socket_patch.dart"
    },
    {
      "type": "modify",
      "old_id": "ff328b8c01fdad80831e0c946b18d69b9cf74b73",
      "old_mode": 33188,
      "old_path": "tests/standalone/io/http_client_connect_test.dart",
      "new_id": "568e5fc89a105e4b2e45206b5b95b5907132cc3e",
      "new_mode": 33188,
      "new_path": "tests/standalone/io/http_client_connect_test.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "80fc914f3e7783f18ff854fbec3fbe09dbe01639",
      "new_mode": 33188,
      "new_path": "tests/standalone/io/regress_50904_test.dart"
    },
    {
      "type": "modify",
      "old_id": "c1a6b82580509ef41c166b840a0ae50993140622",
      "old_mode": 33188,
      "old_path": "tests/standalone_2/io/http_client_connect_test.dart",
      "new_id": "1ba15b682595be7a5dbffb66cf275dc8c62f2837",
      "new_mode": 33188,
      "new_path": "tests/standalone_2/io/http_client_connect_test.dart"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d8f7d6d68c102ef1a52adfc19f8cd5f3a9284cfa",
      "new_mode": 33188,
      "new_path": "tests/standalone_2/io/regress_50904_test.dart"
    }
  ]
}
