mirror of
https://github.com/OpenVPN/openvpn.git
synced 2026-05-28 04:03:29 -04:00
Multi-socket: local_list clean-up
Optimize the current local_list implementation by replacing the static array with a resizable one, as the static allocation serves no real purpose, particularly on the client side. Github: OpenVPN/openvpn#682 Change-Id: I32effed9e273fbe8986d1f4e8da4a4d0ac216463 Signed-off-by: Gianmarco De Gregori <gianmarco@mandelbit.com> Acked-by: Gert Doering <gert@greenie.muc.de> Message-Id: <20250618140016.2766-1-gert@greenie.muc.de> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg31927.html Signed-off-by: Gert Doering <gert@greenie.muc.de>
This commit is contained in:
parent
2dfc4f8279
commit
9bb02bc34f
2 changed files with 14 additions and 5 deletions
|
|
@ -2067,12 +2067,20 @@ alloc_local_entry(struct connection_entry *ce, const int msglevel,
|
|||
struct local_list *l = alloc_local_list_if_undef(ce, gc);
|
||||
struct local_entry *e;
|
||||
|
||||
if (l->len >= CONNECTION_LIST_SIZE)
|
||||
if (l->len >= l->capacity)
|
||||
{
|
||||
msg(msglevel, "Maximum number of 'local' options (%d) exceeded",
|
||||
CONNECTION_LIST_SIZE);
|
||||
const int new_cap = l->capacity + 1;
|
||||
const size_t elem_size = sizeof(*l->array);
|
||||
|
||||
return NULL;
|
||||
struct local_entry **new_array = gc_realloc(l->array, new_cap * elem_size, gc);
|
||||
if (!new_array)
|
||||
{
|
||||
msg(msglevel, "Unable to process more local options: out of memory. Number of entries = %d", l->len);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
l->array = new_array;
|
||||
l->capacity = new_cap;
|
||||
}
|
||||
|
||||
ALLOC_OBJ_CLEAR_GC(e, struct local_entry, gc);
|
||||
|
|
|
|||
|
|
@ -188,8 +188,9 @@ struct remote_entry
|
|||
|
||||
struct local_list
|
||||
{
|
||||
int capacity;
|
||||
int len;
|
||||
struct local_entry *array[CONNECTION_LIST_SIZE];
|
||||
struct local_entry **array;
|
||||
};
|
||||
|
||||
struct connection_list
|
||||
|
|
|
|||
Loading…
Reference in a new issue