From 5ad7b844156475a4cb8ff65c701ba7a188737c3d Mon Sep 17 00:00:00 2001 From: KimLS Date: Wed, 16 Jul 2014 23:52:52 -0700 Subject: [PATCH] Fixed memory allocation for socket write, stopgap for now we can probably set a max message out size and cut out allocations all together. --- web_interface/web_interface.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/web_interface/web_interface.cpp b/web_interface/web_interface.cpp index 7faf8f770..c8cd205a7 100644 --- a/web_interface/web_interface.cpp +++ b/web_interface/web_interface.cpp @@ -53,6 +53,7 @@ int callback_eqemu(libwebsocket_context *context, libwebsocket *wsi, libwebsocke session->send_queue = new std::list(); break; case LWS_CALLBACK_RECEIVE: { + //recv and parse commands here if(len < 1) break; @@ -68,7 +69,12 @@ int callback_eqemu(libwebsocket_context *context, libwebsocket *wsi, libwebsocke case LWS_CALLBACK_SERVER_WRITEABLE: //send stuff here for (auto iter = session->send_queue->begin(); iter != session->send_queue->end(); ++iter) { - auto n = libwebsocket_write(wsi, (unsigned char*)&(*iter)[0], (*iter).size(), LWS_WRITE_TEXT); + size_t sz = LWS_SEND_BUFFER_PRE_PADDING + LWS_SEND_BUFFER_POST_PADDING + (*iter).size(); + unsigned char *buf = new unsigned char[sz]; + memset(buf, 0, sz); + memcpy(&buf[LWS_SEND_BUFFER_PRE_PADDING], &(*iter)[0], (*iter).size()); + auto n = libwebsocket_write(wsi, &buf[LWS_SEND_BUFFER_PRE_PADDING], (*iter).size(), LWS_WRITE_TEXT); + delete[] buf; if (n < (*iter).size()) { //couldn't write the message return -1; @@ -126,7 +132,7 @@ int main() { worldserver = new WorldServer(config->SharedKey); worldserver->Connect(); - writable_socket_timer.Start(50); + writable_socket_timer.Start(10); while(run) { Timer::SetCurrentTime();