Be sure we don't forward an error to a closed event stream.

R=rnystrom@google.com
BUG=15034

Review URL: https://codereview.chromium.org//68253010

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart/pkg/watcher@30210 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/pkgs/watcher/lib/src/async_queue.dart b/pkgs/watcher/lib/src/async_queue.dart
index 9456631..8ac0cdf 100644
--- a/pkgs/watcher/lib/src/async_queue.dart
+++ b/pkgs/watcher/lib/src/async_queue.dart
@@ -8,7 +8,6 @@
 import 'dart:collection';
 
 typedef Future ItemProcessor<T>(T item);
-typedef void ErrorHandler(error);
 
 /// A queue of items that are sequentially, asynchronously processed.
 ///
@@ -35,9 +34,9 @@
   /// The handler for errors thrown during processing.
   ///
   /// Used to avoid top-leveling asynchronous errors.
-  final ErrorHandler _errorHandler;
+  final Function _errorHandler;
 
-  AsyncQueue(this._processor, {ErrorHandler onError})
+  AsyncQueue(this._processor, {Function onError})
       : _errorHandler = onError;
 
   /// Enqueues [item] to be processed and starts asynchronously processing it
diff --git a/pkgs/watcher/lib/src/directory_watcher/polling.dart b/pkgs/watcher/lib/src/directory_watcher/polling.dart
index 0e190b0..e50a0c0 100644
--- a/pkgs/watcher/lib/src/directory_watcher/polling.dart
+++ b/pkgs/watcher/lib/src/directory_watcher/polling.dart
@@ -72,7 +72,9 @@
 
   _PollingDirectoryWatcher(this.directory, this._pollingDelay) {
     _filesToProcess = new AsyncQueue<String>(_processFile,
-        onError: _events.addError);
+        onError: (e, stackTrace) {
+      if (!_events.isClosed) _events.addError(e, stackTrace);
+    });
 
     _poll();
   }