cwWebSock.cpp : Websock now performs a single memory allocation in send() rather than multiple in send() and exec().

This commit is contained in:
kevin 2024-01-06 08:53:55 -05:00
parent 6ed0f6c080
commit 6b771c0c88

View File

@ -313,7 +313,7 @@ namespace cw
msg_t* t = m1->link; msg_t* t = m1->link;
mem::free(m1->msg); //mem::free(m1->msg);
mem::free(m1); mem::free(m1);
m1 = t; m1 = t;
@ -344,7 +344,7 @@ namespace cw
while((m = p->_q->pop()) != nullptr) while((m = p->_q->pop()) != nullptr)
{ {
mem::free(m->msg); //mem::free(m->msg);
mem::free(m); mem::free(m);
} }
@ -363,7 +363,7 @@ namespace cw
{ {
msg_t* tmp = m->link; msg_t* tmp = m->link;
mem::free(m->msg); //mem::free(m->msg);
mem::free(m); mem::free(m);
m = tmp; m = tmp;
} }
@ -503,9 +503,14 @@ cw::rc_t cw::websock::send(handle_t h, unsigned protocolId, unsigned sessionId,
{ {
rc_t rc = kOkRC; rc_t rc = kOkRC;
msg_t* m = mem::allocZ<msg_t>(1); uint8_t* mem = mem::allocZ<uint8_t>( sizeof(msg_t) + LWS_PRE + byteN );
m->msg = mem::allocZ<unsigned char>(byteN); //msg_t* m = mem::allocZ<msg_t>(1);
memcpy(m->msg,msg,byteN); //m->msg = mem::allocZ<unsigned char>(byteN);
msg_t* m = (msg_t*)mem;
m->msg = mem + sizeof(msg_t);
memcpy(m->msg+LWS_PRE,msg,byteN);
m->msgByteN = byteN; m->msgByteN = byteN;
m->protocolId = protocolId; m->protocolId = protocolId;
m->sessionId = sessionId; 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 // add the pre-padding bytes to the msg
unsigned char* msg = mem::allocZ<unsigned char>(LWS_PRE + m->msgByteN); //unsigned char* msg = mem::allocZ<unsigned char>(LWS_PRE + m->msgByteN);
memcpy( msg+LWS_PRE, m->msg, 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 m->msgId = ps->nextNewMsgId; // set the msg id
ps->begMsg->link = m; // put the msg on the front of the outgoing queue ps->begMsg->link = m; // put the msg on the front of the outgoing queue
ps->begMsg = m; // ps->begMsg = m; //