dispose method

void dispose({
  1. bool purgeZeroize = false,
})

Immediately disposes this scope: cancels tokens, fires dispose callbacks, optionally zeroizes Zeroizable nodes, then disposes the container.

Implementation

void dispose({bool purgeZeroize = false}) {
  if (_isDisposed) return;
  _isDisposed = true;
  _isClosing = true;

  // Cancel all in-flight guarded tasks.
  for (final token in List.of(_activeTokens)) {
    token.cancel();
  }
  _activeTokens.clear();

  // Fire dispose callbacks.
  for (final cb in List.of(_disposeCallbacks)) {
    try {
      cb();
    } catch (_) {}
  }
  _disposeCallbacks.clear();

  // Stop IPC listener.
  _ipcListener?.cancel();
  _ipcListener = null;

  // Dispose the container (and zeroize secure nodes if requested).
  container.dispose(purgeZeroize: purgeZeroize);
  _drainables.clear();
  final cleanup = List.of(_asyncDisposeCallbacks);
  _asyncDisposeCallbacks.clear();
  _disposalComplete = Future.wait([
    container.disposalComplete,
    ...cleanup.map((cb) => Future<void>.sync(cb)),
  ]).then((_) {});
  // Synchronous dispose is best-effort; callers can await disposalComplete.
  _disposalComplete.ignore();
}