diff options
Diffstat (limited to 'src/lib/dlt_user.c')
-rw-r--r-- | src/lib/dlt_user.c | 49 |
1 files changed, 38 insertions, 11 deletions
diff --git a/src/lib/dlt_user.c b/src/lib/dlt_user.c index 2d81a98..95bcf8d 100644 --- a/src/lib/dlt_user.c +++ b/src/lib/dlt_user.c @@ -501,21 +501,48 @@ int dlt_user_atexit_blow_out_user_buffer(void){ uint32_t exitTime = dlt_uptime() + DLT_USER_ATEXIT_RESEND_BUFFER_EXIT_TIMEOUT; - while(dlt_uptime() < exitTime ){ + /* Send content of ringbuffer */ + DLT_SEM_LOCK(); + count = dlt_buffer_get_message_count(&(dlt_user.startup_buffer)); + DLT_SEM_FREE(); + + if (count > 0) + { + while(dlt_uptime() < exitTime ) + { + if (dlt_user.dlt_log_handle == -1) + { + /* Reattach to daemon if neccesary */ + dlt_user_log_reattach_to_daemon(); - ret = dlt_user_log_resend_buffer(); + if ((dlt_user.dlt_log_handle != -1) && (dlt_user.overflow_counter)) + { + if (dlt_user_log_send_overflow()==0) + { + snprintf(str,DLT_USER_BUFFER_LENGTH,"%u messages discarded!\n",dlt_user.overflow_counter); + dlt_log(LOG_WARNING, str); + dlt_user.overflow_counter=0; + } + } + } + + if (dlt_user.dlt_log_handle != -1) + { + ret = dlt_user_log_resend_buffer(); - if(ret == 0) - { - return 0; - } + if(ret == 0) + { + return 0; + } + } - usleep(DLT_USER_ATEXIT_RESEND_BUFFER_SLEEP); - } + usleep(DLT_USER_ATEXIT_RESEND_BUFFER_SLEEP); + } - DLT_SEM_LOCK(); - count = dlt_buffer_get_message_count(&(dlt_user.startup_buffer)); - DLT_SEM_FREE(); + DLT_SEM_LOCK(); + count = dlt_buffer_get_message_count(&(dlt_user.startup_buffer)); + DLT_SEM_FREE(); + } return count; } |