[idd] clipboard: remove stream payload restaging

Keep inbound stream payloads in the bounded stream-target window while
the Helper channel is busy and publish directly from those buffers.
Retain the pending target only for LGMP queue controls. Their credits
remain outstanding across retries.

This removes one full payload copy per client-to-Helper record without
changing delivery order, backpressure, or reset behavior.
This commit is contained in:
Geoffrey McRae
2026-08-15 16:17:23 +10:00
parent 4477ac0de1
commit 5bdfc0fe80
2 changed files with 114 additions and 42 deletions

View File

@@ -83,7 +83,6 @@ private:
bool valid = false;
bool acknowledge = false;
KVMFRClipboardMessage record = {};
uint8_t data[KVMFR_CLIPBOARD_DATA_BYTES] = {};
void Clear()
{
@@ -150,6 +149,7 @@ private:
StreamTarget m_streamTarget[STREAM_TARGET_COUNT];
unsigned m_streamTargetHead = 0;
unsigned m_streamTargetCount = 0;
bool m_streamTargetBusy = false;
KVMFRClipboardMessage m_internalTarget[INTERNAL_TARGET_COUNT] = {};
unsigned m_internalTargetCount = 0;
CLGMPClipboardFiles m_files;
@@ -187,12 +187,15 @@ private:
bool QueueInternalTarget(const KVMFRClipboardMessage& record);
bool PumpInternalTarget();
void ClearStreamTargets();
void ClearQueuedStreamTargets();
bool QueueStreamTarget(const KVMFRClipboardMessage& record,
const uint8_t * data);
void PopStreamTarget();
bool PublishStreamTarget();
bool RetryStreamTarget();
bool PumpStreamTarget();
bool DrainStream(bool& received);
bool ProcessStreamTarget(const KVMFRClipboardMessage& record,
const uint8_t * data);
bool ProcessStreamTarget();
PLGMPMemory FindAvailable(PLGMPMemory (&memory)[MEMORY_COUNT]) const;
PostResult PostForOwner(uint64_t udata, PLGMPMemory memory);
@@ -217,7 +220,7 @@ private:
void ApplyInbound(const KVMFRClipboardMessage& message);
void ApplyOutbound(const KVMFRClipboardMessage& message);
bool BeginTarget(const KVMFRClipboardMessage& message,
const uint8_t * data, bool acknowledge);
bool acknowledge);
ClipboardChannelResult SendControl(
const KVMFRClipboardMessage& record);