From: Tilman Sauerbeck Date: Thu, 28 Dec 2017 11:20:56 +0000 (+0100) Subject: Simplify message reference management in Client_send_message_except(). X-Git-Url: http://git.code-monkey.de/?p=umurmur.git;a=commitdiff_plain;h=21ed5998124647e79de379c35b75acaf7323677a Simplify message reference management in Client_send_message_except(). In Client_send_message_except() and Client_send_message_except_ver(), we only need to take an extra reference when we are about to send the message. --- diff --git a/src/client.c b/src/client.c index 1aea8e2..3d88462 100644 --- a/src/client.c +++ b/src/client.c @@ -679,22 +679,15 @@ void Client_textmessage(client_t *client, char *text) int Client_send_message_except(client_t *client, message_t *msg) { client_t *itr = NULL; - int count = 0; - Msg_inc_ref(msg); /* Make sure a reference is held during the whole iteration. */ while (Client_iterate(&itr) != NULL) { if (itr != client) { - if (count++ > 0) - Msg_inc_ref(msg); /* One extra reference for each new copy */ + Msg_inc_ref(msg); /* One extra reference for each new copy */ Log_debug("Msg %d to %s refcount %d", msg->messageType, itr->username, msg->refcount); Client_send_message(itr, msg); } } - Msg_free(msg); /* Free our reference to the message */ - - if (count == 0) - Msg_free(msg); /* If only 1 client is connected then no message is passed - * to Client_send_message(). Free it here. */ + Msg_free(msg); /* Consume caller's reference. */ return 0; } @@ -702,22 +695,15 @@ int Client_send_message_except(client_t *client, message_t *msg) int Client_send_message_except_ver(client_t *client, message_t *msg, uint32_t version) { client_t *itr = NULL; - int count = 0; - Msg_inc_ref(msg); /* Make sure a reference is held during the whole iteration. */ while (Client_iterate(&itr) != NULL) { if (itr != client) { - if (count++ > 0) - Msg_inc_ref(msg); /* One extra reference for each new copy */ + Msg_inc_ref(msg); /* One extra reference for each new copy */ Log_debug("Msg %d to %s refcount %d", msg->messageType, itr->username, msg->refcount); Client_send_message_ver(itr, msg, version); } } - Msg_free(msg); /* Free our reference to the message */ - - if (count == 0) - Msg_free(msg); /* If only 1 client is connected then no message is passed - * to Client_send_message(). Free it here. */ + Msg_free(msg); /* Consume caller's reference. */ return 0; }