release method

  1. @override
void release()
override

Implementation

@override
void release() {
  if (_released) return;
  _released = true;
  final notice = _stream;
  if (notice != null) {
    notice.detach();
    final streams = _group.streams!;
    streams.remove(notice);
    if (streams.isEmpty) _group.streams = null;
    _stream = null;
  }
  if (--_group.scopes != 0) return;
  final leases = _group.leases.values.toList(growable: false);
  _group.leases.clear();
  _group.exempt = null;
  // Cleanup may reenter disposal or other operations. This group is already
  // detached, so reentrant release cannot release any accepted use twice.
  for (final lease in leases.reversed) {
    lease.release();
  }
}