--- deliantra/server/socket/loop.C 2006/12/16 03:21:08 1.21 +++ deliantra/server/socket/loop.C 2006/12/16 18:39:26 1.24 @@ -49,7 +49,7 @@ #include #define MAX_QUEUE_DEPTH 500 //TODO -#define MAX_QUEUE_BACKLOG 2 //TODO +#define MAX_QUEUE_BACKLOG 5. //TODO void client::reset_state () @@ -78,9 +78,14 @@ send_packet_printf ("drawinfo %d too many commands in queue, ignoring.", NDI_RED); } else - cmd_queue.push_back (command ( - stamp, handler, (char *)salloc (datalen, data), datalen - )); + { + cmd_queue.push_back (command ()); + command &cmd = cmd_queue.back (); + cmd.stamp = stamp; + cmd.handler = handler; + cmd.data = (char *)salloc (datalen + 1, data); + cmd.datalen = datalen; + } } bool @@ -102,7 +107,6 @@ else execute (cmd.handler, cmd.data, cmd.datalen); - sfree (cmd.data, cmd.datalen); cmd_queue.pop_front (); return true;