destroy method
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;
}