release method

void release(
  1. JavascriptRuntime engine
)

Return an engine to the pool. Do not use engine after this call.

Implementation

void release(JavascriptRuntime engine) {
  if (_disposed) {
    _destroy(engine);
    return;
  }
  if (!_all.contains(engine)) {
    throw ArgumentError('Engine not owned by this pool');
  }
  if (!_leased.remove(engine)) {
    throw StateError('Engine is not currently leased');
  }
  _prepareForReuse(engine);
  if (!_all.contains(engine)) {
    // reinitialize failed and engine was destroyed; try to fill a waiter with a new one
    if (_waiters.isNotEmpty && _all.length < maxSize) {
      final eng = _create();
      _all.add(eng);
      _leased.add(eng);
      final w = _waiters.removeFirst();
      if (!w.isCompleted) {
        w.complete(eng);
        return;
      }
      _idle.addLast(eng);
    }
    return;
  }
  while (_waiters.isNotEmpty) {
    final w = _waiters.removeFirst();
    if (!w.isCompleted) {
      _leased.add(engine);
      w.complete(engine);
      return;
    }
  }
  _idle.addLast(engine);
}