Index: packages/pool/lib/pool.dart |
diff --git a/packages/pool/lib/pool.dart b/packages/pool/lib/pool.dart |
index 04aaaea6590456dc4267dc1defe36bd6aea2015d..86f8363cedc6a3f6c31274a6870ce022127a96bc 100644 |
--- a/packages/pool/lib/pool.dart |
+++ b/packages/pool/lib/pool.dart |
@@ -78,8 +78,7 @@ class Pool { |
/// If [timeout] is passed, then if that much time passes without any activity |
/// all pending [request] futures will throw a [TimeoutException]. This is |
/// intended to avoid deadlocks. |
- Pool(this._maxAllocatedResources, {Duration timeout}) |
- : _timeout = timeout { |
+ Pool(this._maxAllocatedResources, {Duration timeout}) : _timeout = timeout { |
if (timeout != null) { |
// Start the timer canceled since we only want to start counting down once |
// we've run out of available resources. |
@@ -140,21 +139,21 @@ class Pool { |
/// |
/// This may be called more than once; it returns the same [Future] each time. |
Future close() => _closeMemo.runOnce(() { |
- if (_closeGroup != null) return _closeGroup.future; |
+ if (_closeGroup != null) return _closeGroup.future; |
- _resetTimer(); |
+ _resetTimer(); |
- _closeGroup = new FutureGroup(); |
- for (var callback in _onReleaseCallbacks) { |
- _closeGroup.add(new Future.sync(callback)); |
- } |
+ _closeGroup = new FutureGroup(); |
+ for (var callback in _onReleaseCallbacks) { |
+ _closeGroup.add(new Future.sync(callback)); |
+ } |
- _allocatedResources -= _onReleaseCallbacks.length; |
- _onReleaseCallbacks.clear(); |
+ _allocatedResources -= _onReleaseCallbacks.length; |
+ _onReleaseCallbacks.clear(); |
- if (_allocatedResources == 0) _closeGroup.close(); |
- return _closeGroup.future; |
- }); |
+ if (_allocatedResources == 0) _closeGroup.close(); |
+ return _closeGroup.future; |
+ }); |
final _closeMemo = new AsyncMemoizer(); |
/// If there are any pending requests, this will fire the oldest one. |
@@ -183,8 +182,9 @@ class Pool { |
_allocatedResources--; |
if (_allocatedResources == 0) _closeGroup.close(); |
} else { |
- _onReleaseCallbacks.add( |
- Zone.current.bindCallback(onRelease, runGuarded: false)); |
+ var zone = Zone.current; |
+ var registered = zone.registerCallback(onRelease); |
+ _onReleaseCallbacks.add(() => zone.run(registered)); |
} |
} |
@@ -221,7 +221,8 @@ class Pool { |
void _onTimeout() { |
for (var completer in _requestedResources) { |
completer.completeError( |
- new TimeoutException("Pool deadlock: all resources have been " |
+ new TimeoutException( |
+ "Pool deadlock: all resources have been " |
"allocated for too long.", |
_timeout), |
new Chain.current()); |