Fix TCP mode memory leak
[umurmur.git] / src / client.c
index 94da524243ee4fbd69afc96ae48c276e09607c06..1994364c18153e4b708b567776888af229034aa4 100644 (file)
@@ -94,8 +94,11 @@ void Client_janitor()
                if (c->availableBandwidth > bwTop)
                        c->availableBandwidth = bwTop;
                
-               if (Timer_isElapsed(&c->lastActivity, 1000000LL * INACTICITY_TIMEOUT))
-                       Client_close(c);
+               if (Timer_isElapsed(&c->lastActivity, 1000000LL * INACTICITY_TIMEOUT)) {
+                       /* No activity from client - assume it is lost and close. */
+                       Log_info("Session ID %d timeout - closing", c->sessionId);
+                       Client_free(c);
+               }
        }
 }
 
@@ -524,10 +527,14 @@ static void Client_voiceMsg_tunnel(client_t *client, message_t *msg)
        Pds_add_numval(pds, msg->sessionId);
        Pds_add_numval(pds, msg->payload.speex.seq);
        Pds_append_data_nosize(pds, msg->payload.speex.data, msg->payload.speex.size);
+       
+       Msg_free(msg);
+       
        if (!pds->bOk)
                Log_warn("Large Speex message from TCP"); /* XXX - pds resize? */
        pds->maxsize = pds->offset;
        Client_voiceMsg(client, pds);
+       
        Pds_free(pds);
 }