diff options
author | Alfredo Cardigliano <alfredo.cardigliano@gmail.com> | 2019-09-11 16:32:40 +0200 |
---|---|---|
committer | Alfredo Cardigliano <alfredo.cardigliano@gmail.com> | 2019-09-11 16:32:40 +0200 |
commit | 7d9ed162c763dc93ec19eb29b97c87760540a86a (patch) | |
tree | a484abe429c96b5e0cf74aa678f697484d2bf38f /src | |
parent | 848c9db4fb9addebfdfe7acaee93deacadca1452 (diff) |
Optimized memory utlization resizing serialization buffer buffer
Diffstat (limited to 'src')
-rw-r--r-- | src/include/ndpi_typedefs.h | 4 | ||||
-rw-r--r-- | src/lib/ndpi_serializer.c | 14 |
2 files changed, 14 insertions, 4 deletions
diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index 3ee448065..b67a22a14 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -1357,6 +1357,9 @@ typedef enum { ndpi_serialization_string } ndpi_serialization_type; +#define NDPI_SERIALIZER_DEFAULT_BUFFER_SIZE 8192 +#define NDPI_SERIALIZER_DEFAULT_BUFFER_INCR 1024 + #define NDPI_SERIALIZER_STATUS_COMMA (1 << 0) #define NDPI_SERIALIZER_STATUS_ARRAY (1 << 1) #define NDPI_SERIALIZER_STATUS_EOR (1 << 2) @@ -1368,6 +1371,7 @@ typedef struct { typedef struct { ndpi_private_serializer_status status; + u_int32_t initial_buffer_size; u_int32_t buffer_size; ndpi_serialization_format fmt; u_int8_t *buffer; diff --git a/src/lib/ndpi_serializer.c b/src/lib/ndpi_serializer.c index be57dd9c9..5572c7eab 100644 --- a/src/lib/ndpi_serializer.c +++ b/src/lib/ndpi_serializer.c @@ -155,7 +155,7 @@ int ndpi_init_serializer_ll(ndpi_serializer *_serializer, memset(serializer, 0, sizeof(ndpi_private_serializer)); - serializer->buffer_size = buffer_size; + serializer->initial_buffer_size = serializer->buffer_size = buffer_size; serializer->buffer = (u_int8_t *) malloc(serializer->buffer_size * sizeof(u_int8_t)); if(serializer->buffer == NULL) @@ -178,7 +178,7 @@ int ndpi_init_serializer_ll(ndpi_serializer *_serializer, int ndpi_init_serializer(ndpi_serializer *_serializer, ndpi_serialization_format fmt) { - return ndpi_init_serializer_ll(_serializer, fmt, 8192); + return ndpi_init_serializer_ll(_serializer, fmt, NDPI_SERIALIZER_DEFAULT_BUFFER_SIZE); } /* ********************************** */ @@ -250,8 +250,14 @@ static inline int ndpi_extend_serializer_buffer(ndpi_serializer *_serializer, u_ void *r; ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer; - if(min_len < 1024) - min_len = 1024; + if (min_len < NDPI_SERIALIZER_DEFAULT_BUFFER_INCR) { + if (serializer->initial_buffer_size < NDPI_SERIALIZER_DEFAULT_BUFFER_INCR) { + if (min_len < serializer->initial_buffer_size) + min_len = serializer->initial_buffer_size; + } else { + min_len = NDPI_SERIALIZER_DEFAULT_BUFFER_INCR; + } + } new_size = serializer->buffer_size + min_len; |