Version 2.10.4

* Cherry-pick da133e5047e0fb447af20cd142fc0cf8363487e6 to stable
* Cherry-pick ff1f611f3eb7c3c58a3a3536ee41816d31acb2bc to stable
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3113e34..16585cd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,12 @@
+## 2.10.4 - 2020-11-12
+
+This is a patch release that fixes a crash in the Dart VM (issues [#43941][],
+[flutter/flutter#43620][], and [Dart-Code/Dart-Code#2814][]).
+
+[#43941]: https://github.com/dart-lang/sdk/issues/43941
+[flutter/flutter#43620]: https://github.com/flutter/flutter/issues/43620
+[Dart-Code/Dart-Code#2814]: https://github.com/Dart-Code/Dart-Code/issues/2814
+
 ## 2.10.3 - 2020-10-29
 
 This is a patch release that fixes the following issues:
diff --git a/sdk/lib/_internal/vm/bin/file_patch.dart b/sdk/lib/_internal/vm/bin/file_patch.dart
index b243920..43fb061 100644
--- a/sdk/lib/_internal/vm/bin/file_patch.dart
+++ b/sdk/lib/_internal/vm/bin/file_patch.dart
@@ -174,9 +174,17 @@
       assert(watcherPath.count > 0);
       watcherPath.count--;
       if (watcherPath.count == 0) {
-        _unwatchPath(_id!, watcherPath.pathId);
-        _pathWatchedEnd();
-        _idMap.remove(watcherPath.pathId);
+        var pathId = watcherPath.pathId;
+        // DirectoryWatchHandle(aka pathId) might be closed already initiated
+        // by issueReadEvent for example. When that happens, appropriate closeEvent
+        // will arrive to us and we will remove this pathId from _idMap. If that
+        // happens we should not try to close it again as pathId is no
+        // longer usable(the memory it points to might be released)
+        if (_idMap.containsKey(pathId)) {
+          _unwatchPath(_id!, pathId);
+          _pathWatchedEnd();
+          _idMap.remove(pathId);
+        }
       }
       _watcherPath = null;
     }
diff --git a/tools/VERSION b/tools/VERSION
index baf9ffe..16def66 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -26,6 +26,6 @@
 CHANNEL stable
 MAJOR 2
 MINOR 10
-PATCH 3
+PATCH 4
 PRERELEASE 0
 PRERELEASE_PATCH 0