Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Unified Diff: pkg/barback/lib/src/pool.dart

Issue 49223004: Revise several already-committed CLs. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/barback/test/package_graph/repetition_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/barback/lib/src/pool.dart
diff --git a/pkg/barback/lib/src/pool.dart b/pkg/barback/lib/src/pool.dart
index 8da8434723a73289c9d945ff50ee249e55e20d4a..73a35e463fdb5d66a7f158e24bf303ac2d315b26 100644
--- a/pkg/barback/lib/src/pool.dart
+++ b/pkg/barback/lib/src/pool.dart
@@ -6,23 +6,23 @@ import 'package:stack_trace/stack_trace.dart';
/// Manages an abstract pool of resources with a limit on how many may be in use
/// at once.
///
-/// When a resource is needed, the user should call [checkOut]. When the
-/// returned future completes with a [PoolResource], the resource may be
-/// allocated. Once the resource has been released, the user should call
-/// [PoolResource.release]. The pool will ensure that only a certain number of
-/// [PoolResource]s may be checked out at once.
+/// When a resource is needed, the user should call [request]. When the returned
+/// future completes with a [PoolResource], the resource may be allocated. Once
+/// the resource has been released, the user should call [PoolResource.release].
+/// The pool will ensure that only a certain number of [PoolResource]s may be
+/// allocated at once.
class Pool {
- /// Completers for checkouts beyond the first [_maxCheckedOutResources].
+ /// Completers for requests beyond the first [_maxAllocatedResources].
///
- /// When an item is released, the next element of [_pendingResources] will be
- /// completed.
- final _pendingResources = new Queue<Completer<PoolResource>>();
+ /// When an item is released, the next element of [_requestedResources] will
+ /// be completed.
+ final _requestedResources = new Queue<Completer<PoolResource>>();
- /// The maximum number of resources that may be checked out at once.
- final int _maxCheckedOutResources;
+ /// The maximum number of resources that may be allocated at once.
+ final int _maxAllocatedResources;
- /// The number of resources that are currently checked out.
- int _checkedOutResources = 0;
+ /// The number of resources that are currently allocated.
+ int _allocatedResources = 0;
/// The timeout timer.
///
@@ -37,43 +37,43 @@ class Pool {
Duration _timeout;
/// Creates a new pool with the given limit on how many resources may be
- /// checked out at once.
+ /// allocated at once.
///
/// If [timeout] is passed, then if that much time passes without any activity
- /// all pending [checkOut] futures will throw an exception. This is indented
+ /// all pending [request] futures will throw an exception. This is indented
/// to avoid deadlocks.
- Pool(this._maxCheckedOutResources, {Duration timeout})
+ Pool(this._maxAllocatedResources, {Duration timeout})
: _timeout = timeout;
- /// Check out a [PoolResource].
+ /// Request a [PoolResource].
///
- /// If the maximum number of resources is already checked out, this will delay
+ /// If the maximum number of resources is already allocated, this will delay
/// until one of them is released.
- Future<PoolResource> checkOut() {
- if (_checkedOutResources < _maxCheckedOutResources) {
- _checkedOutResources++;
+ Future<PoolResource> request() {
+ if (_allocatedResources < _maxAllocatedResources) {
+ _allocatedResources++;
return new Future.value(new PoolResource._(this));
} else {
var completer = new Completer<PoolResource>();
- _pendingResources.add(completer);
- _heartbeat();
+ _requestedResources.add(completer);
+ _resetTimer();
return completer.future;
}
}
- /// Checks out a resource for the duration of [callback], which may return a
+ /// Requests a resource for the duration of [callback], which may return a
/// Future.
///
/// The return value of [callback] is piped to the returned Future.
Future withResource(callback()) {
- return checkOut().then((resource) =>
+ return request().then((resource) =>
new Future.sync(callback).whenComplete(resource.release));
}
- /// If there are any pending checkouts, this will fire the oldest one.
+ /// If there are any pending requests, this will fire the oldest one.
void _onResourceReleased() {
- if (_pendingResources.isEmpty) {
- _checkedOutResources--;
+ if (_requestedResources.isEmpty) {
+ _allocatedResources--;
if (_timer != null) {
_timer.cancel();
_timer = null;
@@ -81,14 +81,13 @@ class Pool {
return;
}
- _heartbeat();
- var pending = _pendingResources.removeFirst();
+ _resetTimer();
+ var pending = _requestedResources.removeFirst();
pending.complete(new PoolResource._(this));
}
- /// Indicates that some external action has occurred and the timer should be
- /// restarted.
- void _heartbeat() {
+ /// A resource has been requested, allocated, or released.
+ void _resetTimer() {
if (_timer != null) _timer.cancel();
if (_timeout == null) {
_timer = null;
@@ -100,11 +99,11 @@ class Pool {
/// Handles [_timer] timing out by causing all pending resource completers to
/// emit exceptions.
void _onTimeout() {
- for (var completer in _pendingResources) {
+ for (var completer in _requestedResources) {
completer.completeException("Pool deadlock: all resources have been "
- "checked out for too long.", new Trace.current().vmTrace);
+ "allocated for too long.", new Trace.current().vmTrace);
}
- _pendingResources.clear();
+ _requestedResources.clear();
_timer = null;
}
}
@@ -122,7 +121,7 @@ class PoolResource {
PoolResource._(this._pool);
/// Tells the parent [Pool] that the resource associated with this resource is
- /// no longer allocated, and that a new [PoolResource] may be checked out.
+ /// no longer allocated, and that a new [PoolResource] may be allocated.
void release() {
if (_released) {
throw new StateError("A PoolResource may only be released once.");
« no previous file with comments | « no previous file | pkg/barback/test/package_graph/repetition_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698