Align reliable_free with other free methods to accept NULL

The semantic of most free methods is to free a pointer and all its
contents and also free the pointer itself. Align reliable_free to this
semantic.

Also clean up the other free uses in key_state_free.

Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <20201023113431.26691-3-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg21215.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
This commit is contained in:
Arne Schwabe 2020-10-23 13:34:29 +02:00 committed by Gert Doering
parent 0d5aab889b
commit 2c8a987761
3 changed files with 12 additions and 21 deletions

View file

@ -326,12 +326,17 @@ reliable_init(struct reliable *rel, int buf_size, int offset, int array_size, bo
void
reliable_free(struct reliable *rel)
{
if (!rel)
{
return;
}
int i;
for (i = 0; i < rel->size; ++i)
{
struct reliable_entry *e = &rel->array[i];
free_buf(&e->buf);
}
free(rel);
}
/* no active buffers? */

View file

@ -192,7 +192,9 @@ bool reliable_ack_write(struct reliable_ack *ack,
void reliable_init(struct reliable *rel, int buf_size, int offset, int array_size, bool hold);
/**
* Free allocated memory associated with a reliable structure.
* Free allocated memory associated with a reliable structure and the pointer
* itself.
* Does nothing if rel is NULL.
*
* @param rel The reliable structured to clean up.
*/

View file

@ -969,27 +969,11 @@ key_state_free(struct key_state *ks, bool clear)
free_buf(&ks->ack_write_buf);
buffer_list_free(ks->paybuf);
if (ks->send_reliable)
{
reliable_free(ks->send_reliable);
free(ks->send_reliable);
}
reliable_free(ks->send_reliable);
reliable_free(ks->rec_reliable);
if (ks->rec_reliable)
{
reliable_free(ks->rec_reliable);
free(ks->rec_reliable);
}
if (ks->rec_ack)
{
free(ks->rec_ack);
}
if (ks->key_src)
{
free(ks->key_src);
}
free(ks->rec_ack);
free(ks->key_src);
packet_id_free(&ks->crypto_options.packet_id);