From 6b771c0c88334ac34c0afb086372ad89df1f8a22 Mon Sep 17 00:00:00 2001 From: kevin Date: Sat, 6 Jan 2024 08:53:55 -0500 Subject: [PATCH] cwWebSock.cpp : Websock now performs a single memory allocation in send() rather than multiple in send() and exec(). --- cwWebSock.cpp | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/cwWebSock.cpp b/cwWebSock.cpp index 4523c38..23a32d0 100644 --- a/cwWebSock.cpp +++ b/cwWebSock.cpp @@ -313,7 +313,7 @@ namespace cw msg_t* t = m1->link; - mem::free(m1->msg); + //mem::free(m1->msg); mem::free(m1); m1 = t; @@ -344,7 +344,7 @@ namespace cw while((m = p->_q->pop()) != nullptr) { - mem::free(m->msg); + //mem::free(m->msg); mem::free(m); } @@ -363,7 +363,7 @@ namespace cw { msg_t* tmp = m->link; - mem::free(m->msg); + //mem::free(m->msg); mem::free(m); m = tmp; } @@ -502,10 +502,15 @@ cw::rc_t cw::websock::destroy( handle_t& h ) cw::rc_t cw::websock::send(handle_t h, unsigned protocolId, unsigned sessionId, const void* msg, unsigned byteN ) { rc_t rc = kOkRC; + + uint8_t* mem = mem::allocZ( sizeof(msg_t) + LWS_PRE + byteN ); + //msg_t* m = mem::allocZ(1); + //m->msg = mem::allocZ(byteN); + + msg_t* m = (msg_t*)mem; + m->msg = mem + sizeof(msg_t); - msg_t* m = mem::allocZ(1); - m->msg = mem::allocZ(byteN); - memcpy(m->msg,msg,byteN); + memcpy(m->msg+LWS_PRE,msg,byteN); m->msgByteN = byteN; m->protocolId = protocolId; m->sessionId = sessionId; @@ -593,12 +598,13 @@ cw::rc_t cw::websock::exec( handle_t h, unsigned timeOutMs ) // add the pre-padding bytes to the msg - unsigned char* msg = mem::allocZ(LWS_PRE + m->msgByteN); - memcpy( msg+LWS_PRE, m->msg, m->msgByteN ); + //unsigned char* msg = mem::allocZ(LWS_PRE + m->msgByteN); + //memcpy( msg+LWS_PRE, m->msg, m->msgByteN ); - mem::free(m->msg); // free the original msg buffer + //mem::free(m->msg); // free the original msg buffer + + //m->msg = msg; - m->msg = msg; m->msgId = ps->nextNewMsgId; // set the msg id ps->begMsg->link = m; // put the msg on the front of the outgoing queue ps->begMsg = m; //