mirror of
https://github.com/Ylianst/MeshAgent
synced 2025-12-14 23:33:38 +00:00
Updated behavior, so if a websocket write occurs on a non microstack thread, and it needs to merge buffers, it will allocate off the heap instead of the stack, to prevent a stack overflow if a very large amount of data is passed in.
This commit is contained in:
@@ -3436,6 +3436,7 @@ ILibTransport_DoneState ILibDuktape_httpStream_webSocket_WriteWebSocketPacket(IL
|
|||||||
|
|
||||||
ILibWebClient_WebSocket_FragmentFlags bufferFragment;
|
ILibWebClient_WebSocket_FragmentFlags bufferFragment;
|
||||||
|
|
||||||
|
|
||||||
buffer = _buffer;
|
buffer = _buffer;
|
||||||
bufferLen = _bufferLen;
|
bufferLen = _bufferLen;
|
||||||
bufferFragment = _bufferFragment;
|
bufferFragment = _bufferFragment;
|
||||||
@@ -3506,11 +3507,11 @@ ILibTransport_DoneState ILibDuktape_httpStream_webSocket_WriteWebSocketPacket(IL
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// We're not on the Duktape Thread, so we need to merge these buffers, to make a single write
|
// We're not on the Duktape Thread, so we need to merge these buffers, to make a single write
|
||||||
char *dataFrame = ILibMemory_AllocateA(headerLen + bufferLen);
|
char *dataFrame = ILibMemory_SmartAllocate(headerLen + bufferLen);
|
||||||
|
|
||||||
memcpy_s(dataFrame, headerLen, header, headerLen);
|
memcpy_s(dataFrame, headerLen, header, headerLen);
|
||||||
memcpy_s(dataFrame + headerLen, bufferLen, buffer, bufferLen);
|
memcpy_s(dataFrame + headerLen, bufferLen, buffer, bufferLen);
|
||||||
retVal = ILibDuktape_DuplexStream_WriteData(state->encodedStream, dataFrame, headerLen + bufferLen) == 0 ? ILibTransport_DoneState_COMPLETE : ILibTransport_DoneState_INCOMPLETE;
|
retVal = ILibDuktape_DuplexStream_WriteData(state->encodedStream, dataFrame, headerLen + bufferLen) == 0 ? ILibTransport_DoneState_COMPLETE : ILibTransport_DoneState_INCOMPLETE;
|
||||||
|
ILibMemory_Free(dataFrame);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user