summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Muck <christian.muck@bmw.de>2012-01-13 09:12:22 +0100
committerChristian Muck <christian.muck@bmw.de>2012-01-13 09:12:22 +0100
commit0b78edd4b27365f508d79c8dcbe431e6c0f947cc (patch)
tree2a14663bc59e7effb6e37f0717d364106db54e40 /src
parentd5ae8f4c6354349fc047898122a50932a3cb608a (diff)
downloadDLT-daemon-0b78edd4b27365f508d79c8dcbe431e6c0f947cc.tar.gz
[GSW-138] API Extension to resend the log messages in the user buffer fixed.
Diffstat (limited to 'src')
-rwxr-xr-xsrc/lib/dlt_user.c35
-rwxr-xr-xsrc/lib/dlt_user_cfg.h7
2 files changed, 42 insertions, 0 deletions
diff --git a/src/lib/dlt_user.c b/src/lib/dlt_user.c
index 8c82dd3..594fe39 100755
--- a/src/lib/dlt_user.c
+++ b/src/lib/dlt_user.c
@@ -331,6 +331,16 @@ int dlt_init_common(void)
void dlt_user_atexit_handler(void)
{
+
+ /* Try to resend potential log messages in the user buffer */
+ int count = dlt_user_atexit_blow_out_user_buffer();
+
+ if(count != 0){
+ char tmp[256];
+ sprintf(&tmp,"Lost log messages in user buffer when exiting: %i\n",count);
+ dlt_log(LOG_ERR, tmp);
+ }
+
/* Unregister app (this also unregisters all contexts in daemon) */
/* Ignore return value */
dlt_unregister_app();
@@ -340,6 +350,31 @@ void dlt_user_atexit_handler(void)
dlt_free();
}
+int dlt_user_atexit_blow_out_user_buffer(void){
+
+ int count,ret;
+
+ uint32_t exitTime = dlt_uptime() + DLT_USER_ATEXIT_RESEND_BUFFER_EXIT_TIMEOUT;
+
+ while(dlt_uptime() < exitTime ){
+
+ ret = dlt_user_log_resend_buffer();
+
+ if(ret == 0)
+ {
+ return 0;
+ }
+
+ usleep(DLT_USER_ATEXIT_RESEND_BUFFER_SLEEP);
+ }
+
+ DLT_SEM_LOCK();
+ count = dlt_buffer_get_message_count(&(dlt_user.startup_buffer));
+ DLT_SEM_FREE();
+
+ return count;
+}
+
int dlt_free(void)
{
int i;
diff --git a/src/lib/dlt_user_cfg.h b/src/lib/dlt_user_cfg.h
index e3bb8a3..46e8c52 100755
--- a/src/lib/dlt_user_cfg.h
+++ b/src/lib/dlt_user_cfg.h
@@ -132,6 +132,13 @@
/* Name of environment variable for local print mode */
#define DLT_USER_ENV_LOCAL_PRINT_MODE "DLT_LOCAL_PRINT_MODE"
+/* Timeout offset for resending user buffer at exit in usec (1000 usec = 1ms)*/
+#define DLT_USER_ATEXIT_RESEND_BUFFER_EXIT_TIMEOUT 100000
+
+/* Sleeps between resending user buffer at exit in usec (1000 usec = 1ms)*/
+#define DLT_USER_ATEXIT_RESEND_BUFFER_SLEEP 1000
+
+
/************************/
/* Don't change please! */
/************************/