destroy method

  1. @override
Future<void> destroy()

Destroys the outlet and cleans up resources. You can no longer use the outlet after calling this method.

Implementation

@override
Future<void> destroy() async {
  if (destroyed || !created) {
    return; // Already destroyed
  }
  super.destroy();
  // Clean up resources
  if (_useIsolates) {
    await _isolateManagerBang.sendMessage(
      LSLMessage(LSLMessageType.destroy, {}),
    );
    _isolateManagerBang.dispose();
  } else if (_outlet != null && _managed) {
    try {
      lsl_destroy_outlet(_outletBang);
    } catch (e) {
      // Ignore errors during destroy, as the outlet may already be destroyed
    }
  }
  _outlet = null;
  _isolateManager = null;
  final buffer = _buffer;
  _buffer = null;
  if (buffer != null && !buffer.isNullPointer) {
    // Release any per-element allocations (string samples) still held.
    _pushFn.cleanupBuffer(buffer, streamInfo.channelCount);
    buffer.free();
  }
  final chunkBuffer = _chunkBuffer;
  if (chunkBuffer != null && !chunkBuffer.freed) {
    _pushChunkFn?.cleanupBuffer(
      chunkBuffer.data,
      chunkBuffer.capacitySamples * streamInfo.channelCount,
    );
    chunkBuffer.free();
  }
  _chunkBuffer = null;
}