done method

  1. @override
void done()
override

Done ends the span and releases associated resources.

Implementation

@override
void done() {
  if (_isDone) {
    _logWarn('BUG: done() called on already done scope $name');
    return;
  }

  final currentStat = stat;
  if (_owner != null) {
    // This is a span scope
    _owner!._releaseResourcesForChild(currentStat);
    _owner!.decRef(); // Decrement owner's ref count as span is done
  } else {
    // This is a DAG scope
    for (var edge in edges) { // Use public field
      edge._releaseResourcesForChild(currentStat);
      edge.decRef();
    }
  }

  // Clear local resources
  _resources.memory = 0;
  _resources.streamsInbound = 0;
  _resources.streamsOutbound = 0;
  _resources.connsInbound = 0;
  _resources.connsOutbound = 0;
  _resources.fds = 0;

  _isDone = true;
  // TODO: trace.DestroyScope(name);
  // log.debug('Scope done: $name');
}