| Index: lib/src/directory_watcher/mac_os.dart
|
| diff --git a/lib/src/directory_watcher/mac_os.dart b/lib/src/directory_watcher/mac_os.dart
|
| index e3efa2dd64bc034aaeed4b1e9369c67171a036c1..e6f08dcb7751cb799d52c1925320155e1b0e563a 100644
|
| --- a/lib/src/directory_watcher/mac_os.dart
|
| +++ b/lib/src/directory_watcher/mac_os.dart
|
| @@ -69,9 +69,9 @@ class _MacOSDirectoryWatcher implements ManuallyClosedDirectoryWatcher {
|
| /// the directory to determine its initial state.
|
| StreamSubscription<FileSystemEntity> _initialListSubscription;
|
|
|
| - /// The subscription to the [Directory.list] call for listing the contents of
|
| - /// a subdirectory that was moved into the watched directory.
|
| - StreamSubscription<FileSystemEntity> _listSubscription;
|
| + /// The subscriptions to [Directory.list] calls for listing the contents of a
|
| + /// subdirectory that was moved into the watched directory.
|
| + final _listSubscriptions = new Set<StreamSubscription<FileSystemEntity>>();
|
|
|
| /// The timer for tracking how long we wait for an initial batch of bogus
|
| /// events (see issue 14373).
|
| @@ -113,10 +113,14 @@ class _MacOSDirectoryWatcher implements ManuallyClosedDirectoryWatcher {
|
| }
|
| if (_watchSubscription != null) _watchSubscription.cancel();
|
| if (_initialListSubscription != null) _initialListSubscription.cancel();
|
| - if (_listSubscription != null) _listSubscription.cancel();
|
| _watchSubscription = null;
|
| _initialListSubscription = null;
|
| - _listSubscription = null;
|
| +
|
| + for (var subscription in _listSubscriptions) {
|
| + subscription.cancel();
|
| + }
|
| + _listSubscriptions.clear();
|
| +
|
| _eventsController.close();
|
| }
|
|
|
| @@ -191,8 +195,9 @@ class _MacOSDirectoryWatcher implements ManuallyClosedDirectoryWatcher {
|
|
|
| if (_files.containsDir(path)) continue;
|
|
|
| - var stream = Chain.track(new Directory(path).list(recursive: true));
|
| - _listSubscription = stream.listen((entity) {
|
| + var subscription;
|
| + subscription = Chain.track(new Directory(path).list(recursive: true))
|
| + .listen((entity) {
|
| if (entity is Directory) return;
|
| if (_files.contains(path)) return;
|
|
|
| @@ -203,7 +208,10 @@ class _MacOSDirectoryWatcher implements ManuallyClosedDirectoryWatcher {
|
| print("[$_id] got error listing $relativePath: $e");
|
| }
|
| _emitError(e, stackTrace);
|
| + }, onDone: () {
|
| + _listSubscriptions.remove(subscription);
|
| }, cancelOnError: true);
|
| + _listSubscriptions.add(subscription);
|
| } else if (event is FileSystemModifyEvent) {
|
| assert(!event.isDirectory);
|
| _emitEvent(ChangeType.MODIFY, path);
|
|
|