diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..0e4203b
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,7 @@
+## 1.0.1
+
+* Properly release resources for requests that error out.
+
+## 1.0.0
+
+* Initial release.
diff --git a/lib/http_throttle.dart b/lib/http_throttle.dart
index a9e9e50..5e30ed8 100644
--- a/lib/http_throttle.dart
+++ b/lib/http_throttle.dart
@@ -25,23 +25,29 @@
       : _pool = new Pool(maxActiveRequests),
         _inner = inner == null ? new Client() : inner;
 
-  Future<StreamedResponse> send(BaseRequest request) {
-    return _pool.request().then((resource) {
-      return _inner.send(request).then((response) {
-        var stream = response.stream.transform(
-            new StreamTransformer.fromHandlers(handleDone: (sink) {
-          resource.release();
-          sink.close();
-        }));
-        return new StreamedResponse(stream, response.statusCode,
-            contentLength: response.contentLength,
-            request: response.request,
-            headers: response.headers,
-            isRedirect: response.isRedirect,
-            persistentConnection: response.persistentConnection,
-            reasonPhrase: response.reasonPhrase);
-      });
-    });
+  Future<StreamedResponse> send(BaseRequest request) async {
+    var resource = await _pool.request();
+
+    StreamedResponse response;
+    try {
+      response = await _inner.send(request);
+    } catch (_) {
+      resource.release();
+      rethrow;
+    }
+
+    var stream = response.stream.transform(
+        new StreamTransformer.fromHandlers(handleDone: (sink) {
+      resource.release();
+      sink.close();
+    }));
+    return new StreamedResponse(stream, response.statusCode,
+        contentLength: response.contentLength,
+        request: response.request,
+        headers: response.headers,
+        isRedirect: response.isRedirect,
+        persistentConnection: response.persistentConnection,
+        reasonPhrase: response.reasonPhrase);
   }
 
   void close() => _inner.close();
diff --git a/pubspec.yaml b/pubspec.yaml
index 1cb3291..9d0817a 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: http_throttle
-version: 1.0.1-dev
+version: 1.0.1
 author: Dart Team <misc@dartlang.org>
 homepage: https://github.com/dart-lang/http_throttle
 description: HTTP client middleware that throttles requests.
diff --git a/test/http_throttle_test.dart b/test/http_throttle_test.dart
index 0cf0662..226e763 100644
--- a/test/http_throttle_test.dart
+++ b/test/http_throttle_test.dart
@@ -54,6 +54,18 @@
       expect(pendingResponses, hasLength(5));
     });
   });
+
+  test("releases resources when HTTP requests error out", () {
+    var pendingResponses = [];
+    var client = new ThrottleClient(10,
+        new MockClient((request) => new Future.error("oh no!")));
+
+    // Every request should throw. If we aren't properly releasing resources,
+    // all of these after the 10th will fail to complete.
+    for (var i = 0; i < 20; i++) {
+      expect(client.get('/'), throwsA("oh no!"));
+    }
+  });
 }
 
 /// Returns a [Future] that completes after pumping the event queue [times]
