diff options
author | Lassi Marttala <lassi.lm.marttala@partner.bmw.com> | 2012-04-11 14:54:02 +0200 |
---|---|---|
committer | Christian Muck <christian.muck@bmw.de> | 2012-04-20 10:49:10 +0200 |
commit | 7ff92d0674d6a7deb9954313a4e4c6e86c7c46de (patch) | |
tree | 0b6f67e4259d7bf856f9839cd399003b481e9310 /src/lib/dlt_user.c | |
parent | a7e0e21ec70d59b44e196f99b3238353197adf22 (diff) | |
download | DLT-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>
Diffstat (limited to 'src/lib/dlt_user.c')
-rwxr-xr-x | src/lib/dlt_user.c | 14 |
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++) |