summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLassi Marttala <lassi.lm.marttala@partner.bmw.com>2012-04-11 14:54:02 +0200
committerChristian Muck <christian.muck@bmw.de>2012-04-20 10:49:10 +0200
commit7ff92d0674d6a7deb9954313a4e4c6e86c7c46de (patch)
tree0b6f67e4259d7bf856f9839cd399003b481e9310
parenta7e0e21ec70d59b44e196f99b3238353197adf22 (diff)
downloadDLT-daemon-7ff92d0674d6a7deb9954313a4e4c6e86c7c46de.tar.gz
[GDLT-47] Avoid discarding old contexts if no new memory can be allocated
when resizing contexts array. Signed-off-by: Christian Muck <christian.muck@bmw.de>
-rwxr-xr-xsrc/lib/dlt_user.c14
1 files 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<dlt_user.dlt_ll_ts_max_num_entries;i++)