Commit Graph
9 Commits
Author SHA1 Message Date
Tobias Brunner 8069b3b14b array: Allocate initial data properly if esize is 0 2014-05-15 11:28:05 +02:00
Tobias Brunner 11f31ceb6a array: Fix removal of elements in the second half of an array
Memory beyond the end of the array was moved when array elements in the
second half of an array were removed.

Fixes #548.
2014-03-18 14:46:16 +01:00
Tobias Brunner 593251fcf6 array: Fix compilation on FreeBSD 2014-02-13 10:46:46 +01:00
Tobias Brunner b3613c49a2 array: Add fallback for qsort_r using thread-local value
Cygwin for example does not support qsort_r.
2014-02-12 14:34:33 +01:00
Tobias Brunner 79962d9e99 array: Add array_bsearch function 2014-02-12 14:34:33 +01:00
Tobias Brunner 132b00ce02 array: Add array_sort function 2014-02-12 14:34:33 +01:00
Martin Willi 589fab2260 array: Add an array_get() function 2014-01-22 15:34:53 +01:00
Tobias Brunner 116363e5c6 array: Number of items in get_size() is unsigned
Otherwise, array->esize is promoted to int and if array->esize * num
results in a value > 0x7fffffff the return value would be incorrect due
the implicit sign extension when getting cast to size_t.
2013-07-25 11:28:01 +02:00
Martin Willi 2621ff4d40 array: introduce an array collection storing elements very efficiently
Currently we use the very versatile linked-list collection to store elements
with variable count. This is fine, but very inefficient: Due to the many
methods in the linked list, on 64-bit platforms an empty list alone is more
than 200 bytes. As we currently have about 50 lists per IKE_SA/CHILD_SA pair,
this takes up to 10KB just for managing the empty lists. This is about the
half of memory used by an IKE_SA/CHILD_SA pair, and obviously way too much.

The new array type is not an object, but a collection of functions on an
abstract type.

The following lists are per IKE_SA and should be considered for a replacement
with more efficient arrays (this uses load-testers on-demand created dynamic
configurations, other scenarios have different lists):

14 -> ike_sa_create() @ src/libcharon/sa/ike_sa.c:2198
10 -> auth_cfg_create() @ src/libstrongswan/credentials/auth_cfg.c:1088
 6 -> task_manager_v2_create() @ src/libcharon/sa/ikev2/task_manager_v2.c:1505
 6 -> proposal_create() @ src/libcharon/config/proposal.c:592
 5 -> peer_cfg_create() @ src/libcharon/config/peer_cfg.c:657
 4 -> child_sa_create() @ src/libcharon/sa/child_sa.c:1090
 2 -> child_cfg_create() @ src/libcharon/config/child_cfg.c:536
 1 -> ike_cfg_create() @ src/libcharon/config/ike_cfg.c:330
 1 -> put_connected_peers() @ src/libcharon/sa/ike_sa_manager.c:854
2013-07-17 17:20:17 +02:00