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-05-30 09:05:27 +0200 |
commit | 2b1d701e00027f3252feee9bc59f91effec431e2 (patch) | |
tree | db5aec11b9167ad7a7907209a379550283b3d2d1 | |
parent | cff24c7822f0043452bd979cbf3af53f3bcb6149 (diff) | |
download | DLT-daemon-2b1d701e00027f3252feee9bc59f91effec431e2.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-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++) |