From cb0f43e17eed14aa79859d6ca4dbaf49f4248e51 Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Tue, 3 Dec 2019 12:27:06 -0800 Subject: [PATCH] Fixed unshift logic for IPC socket --- microscript/ILibDuktape_net.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/microscript/ILibDuktape_net.c b/microscript/ILibDuktape_net.c index ff5b6b7..c012d3c 100644 --- a/microscript/ILibDuktape_net.c +++ b/microscript/ILibDuktape_net.c @@ -883,12 +883,21 @@ void ILibDuktape_net_server_IPC_ResumeSink(ILibDuktape_DuplexStream *sender, voi ILibDuktape_DuplexStream_WriteData(winIPC->ds, winIPC->buffer + winIPC->bufferOffset, winIPC->bytesLeft); if (winIPC->unshiftedBytes > 0) { - winIPC->bufferOffset += (winIPC->bytesLeft - winIPC->unshiftedBytes); - if (winIPC->bytesLeft == winIPC->unshiftedBytes) + if (winIPC->unshiftedBytes == winIPC->bytesLeft) { + // Unshift the entire buffer winIPC->unshiftedBytes = 0; } - winIPC->bytesLeft = winIPC->unshiftedBytes; + else + { + // Unshift some of the buffer + winIPC->bufferOffset += (winIPC->bytesLeft - winIPC->unshiftedBytes); + if (winIPC->bytesLeft == winIPC->unshiftedBytes) + { + winIPC->unshiftedBytes = 0; + } + winIPC->bytesLeft = winIPC->unshiftedBytes; + } } else {