From 7ff92d0674d6a7deb9954313a4e4c6e86c7c46de Mon Sep 17 00:00:00 2001 From: Lassi Marttala Date: Wed, 11 Apr 2012 14:54:02 +0200 Subject: [GDLT-47] Avoid discarding old contexts if no new memory can be allocated when resizing contexts array. Signed-off-by: Christian Muck --- src/lib/dlt_user.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/lib/dlt_user.c b/src/lib/dlt_user.c index 8fa184b..6685109 100755 --- a/src/lib/dlt_user.c +++ b/src/lib/dlt_user.c @@ -626,19 +626,25 @@ int dlt_register_context_ll_ts(DltContext *handle, const char *contextid, const if ((dlt_user.dlt_ll_ts_num_entries%DLT_USER_CONTEXT_ALLOC_SIZE)==0) { /* allocate memory in steps of DLT_USER_CONTEXT_ALLOC_SIZE, e.g. 500 */ - dlt_ll_ts_type *old; - old = dlt_user.dlt_ll_ts; + dlt_ll_ts_type *old_ll_ts; + uint32_t old_max_entries; + + old_ll_ts = dlt_user.dlt_ll_ts; + old_max_entries = dlt_user.dlt_ll_ts_max_num_entries; + dlt_user.dlt_ll_ts_max_num_entries = ((dlt_user.dlt_ll_ts_num_entries/DLT_USER_CONTEXT_ALLOC_SIZE)+1)*DLT_USER_CONTEXT_ALLOC_SIZE; dlt_user.dlt_ll_ts = (dlt_ll_ts_type*) malloc(sizeof(dlt_ll_ts_type)* dlt_user.dlt_ll_ts_max_num_entries); if (dlt_user.dlt_ll_ts==0) { + dlt_user.dlt_ll_ts = old_ll_ts; + dlt_user.dlt_ll_ts_max_num_entries = old_max_entries; DLT_SEM_FREE(); return -1; } - memcpy(dlt_user.dlt_ll_ts,old,sizeof(dlt_ll_ts_type)*dlt_user.dlt_ll_ts_num_entries); - free(old); + memcpy(dlt_user.dlt_ll_ts,old_ll_ts,sizeof(dlt_ll_ts_type)*dlt_user.dlt_ll_ts_num_entries); + free(old_ll_ts); /* Initialize new entries */ for (i=dlt_user.dlt_ll_ts_num_entries;i