| Index: pkg/analysis_server/lib/src/analysis_server.dart | 
| diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart | 
| index afd6affa953b04c3dd72f2d0436f09f9a6584770..1c9004ff8f00488234924bf913fead6c72cc9884 100644 | 
| --- a/pkg/analysis_server/lib/src/analysis_server.dart | 
| +++ b/pkg/analysis_server/lib/src/analysis_server.dart | 
| @@ -66,8 +66,7 @@ class AnalysisServer { | 
| AnalysisServer(this.channel) { | 
| AnalysisEngine.instance.logger = new AnalysisLogger(); | 
| running = true; | 
| -    // TODO set running=false on done or error | 
| -    channel.listen(handleRequest); | 
| +    channel.listen(handleRequest, onDone: done, onError: error); | 
| } | 
|  | 
| /** | 
| @@ -92,7 +91,7 @@ class AnalysisServer { | 
| * There was an error related to the socket from which requests are being | 
| * read. | 
| */ | 
| -  void error() { | 
| +  void error(argument) { | 
| running = false; | 
| } | 
|  | 
| @@ -102,9 +101,14 @@ class AnalysisServer { | 
| void handleRequest(Request request) { | 
| int count = handlers.length; | 
| for (int i = 0; i < count; i++) { | 
| -      Response response = handlers[i].handleRequest(request); | 
| -      if (response != null) { | 
| -        channel.sendResponse(response); | 
| +      try { | 
| +        Response response = handlers[i].handleRequest(request); | 
| +        if (response != null) { | 
| +          channel.sendResponse(response); | 
| +          return; | 
| +        } | 
| +      } on RequestFailure catch (exception) { | 
| +        channel.sendResponse(exception.response); | 
| return; | 
| } | 
| } | 
|  |