From 27775afeeb2dc2ec86d41d22898fcdee57621afe Mon Sep 17 00:00:00 2001 From: Sascha Philipp Date: Mon, 29 Sep 2014 09:34:36 +0200 Subject: Open daemon connection in atexit function Change-Id: I43f1a3b541720d1ae06912cc5d1026daa077245a Signed-off-by: Sascha Philipp --- src/lib/dlt_user.c | 49 ++++++++++++++++++++++++++++-------- src/lib/dlt_user.c.rej | 62 ++++++++++++++++++++++++++++++++++++++++++++++ src/lib/dlt_user_cfg.h | 4 +-- src/lib/dlt_user_cfg.h.rej | 16 ++++++++++++ 4 files changed, 118 insertions(+), 13 deletions(-) create mode 100644 src/lib/dlt_user.c.rej create mode 100644 src/lib/dlt_user_cfg.h.rej 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; } diff --git a/src/lib/dlt_user.c.rej b/src/lib/dlt_user.c.rej new file mode 100644 index 0000000..c197d0d --- /dev/null +++ b/src/lib/dlt_user.c.rej @@ -0,0 +1,62 @@ +--- src/lib/dlt_user.c ++++ src/lib/dlt_user.c +@@ -501,48 +501,21 @@ int dlt_user_atexit_blow_out_user_buffer(void){ + + uint32_t exitTime = dlt_uptime() + DLT_USER_ATEXIT_RESEND_BUFFER_EXIT_TIMEOUT; + +- /* 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(); ++ while(dlt_uptime() < exitTime ){ + +- 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(); ++ 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; + } diff --git a/src/lib/dlt_user_cfg.h b/src/lib/dlt_user_cfg.h index 9559c98..3355714 100755 --- a/src/lib/dlt_user_cfg.h +++ b/src/lib/dlt_user_cfg.h @@ -126,11 +126,11 @@ /* 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)*/ +/* Timeout offset for resending user buffer at exit in 10th milliseconds (10000 = 1s)*/ #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 +#define DLT_USER_ATEXIT_RESEND_BUFFER_SLEEP 100000 /************************/ diff --git a/src/lib/dlt_user_cfg.h.rej b/src/lib/dlt_user_cfg.h.rej new file mode 100644 index 0000000..a722e78 --- /dev/null +++ b/src/lib/dlt_user_cfg.h.rej @@ -0,0 +1,16 @@ +--- src/lib/dlt_user_cfg.h ++++ src/lib/dlt_user_cfg.h +@@ -126,11 +126,11 @@ + /* 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 10th milliseconds (10000 = 1s)*/ ++/* 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 100000 ++#define DLT_USER_ATEXIT_RESEND_BUFFER_SLEEP 1000 + + + /************************/ -- cgit v1.2.1