summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLassi Marttala <Lassi.LM.Marttala@partner.bmw.de>2012-10-08 12:48:51 +0200
committerLassi Marttala <Lassi.LM.Marttala@partner.bmw.de>2012-10-09 13:55:32 +0200
commitf9bf51da1fd4839938097cfcfed185a7357ebade (patch)
treec6b14d3444494b16a712816c5731e13653f9fd16
parent20bcfb6c88769bfa38e5bc8389949b8563934882 (diff)
downloadDLT-daemon-f9bf51da1fd4839938097cfcfed185a7357ebade.tar.gz
[GDLT-120]: Never block if queue is full.
-rw-r--r--src/lib/dlt_user.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/src/lib/dlt_user.c b/src/lib/dlt_user.c
index 0681bd6..6fdbba8 100644
--- a/src/lib/dlt_user.c
+++ b/src/lib/dlt_user.c
@@ -343,7 +343,7 @@ int dlt_init_message_queue(void)
}
}
- dlt_user.dlt_segmented_queue_write_handle = mq_open(queue_name, O_WRONLY);
+ dlt_user.dlt_segmented_queue_write_handle = mq_open(queue_name, O_WRONLY|O_NONBLOCK);
if(dlt_user.dlt_segmented_queue_write_handle < 0)
{
dlt_log(LOG_CRIT, "Can't open message queue write handle!\n");
@@ -1098,7 +1098,7 @@ int dlt_forward_msg(void *msgdata,size_t size)
DLT_SEM_FREE();
- if(dlt_user_queue_resend() < 0)
+ if(dlt_user_queue_resend() < 0 && dlt_user.dlt_log_handle >= 0)
{
dlt_log(LOG_WARNING, "Failed to queue resending.\n");
}
@@ -2251,6 +2251,10 @@ int dlt_user_trace_network_segmented(DltContext *handle, DltNetworkTraceType nw_
if(mq_send(dlt_user.dlt_segmented_queue_write_handle,
(char *)&thread_data, sizeof(s_segmented_data *), 1) < 0)
{
+ if(errno == EAGAIN)
+ {
+ dlt_log(LOG_ERR, "NWTSegmented: Queue full. Message discarded.\n");
+ }
free(thread_data->header);
free(thread_data->payload);
free(thread_data);
@@ -2661,6 +2665,11 @@ int dlt_user_log_init(DltContext *handle, DltContextData *log)
int dlt_user_queue_resend(void)
{
+ if(dlt_user.dlt_log_handle < 0)
+ {
+ // Fail silenty. FIFO is not open yet
+ return -1;
+ }
/**
* Ask segmented thread to try emptying the buffer soon.
* This will be freed in dlt_user_trace_network_segmented_thread
@@ -2911,7 +2920,8 @@ DltReturnValue dlt_user_log_send_log(DltContextData *log, int mtype)
DLT_SEM_FREE();
- if(dlt_user_queue_resend() < 0)
+ // Fail silenty if FIFO is not open
+ if(dlt_user_queue_resend() < 0 && dlt_user.dlt_log_handle >= 0)
{
dlt_log(LOG_WARNING, "Failed to queue resending.\n");
}
@@ -3024,7 +3034,7 @@ int dlt_user_log_send_register_application(void)
DLT_SEM_FREE();
- if(dlt_user_queue_resend() < 0)
+ if(dlt_user_queue_resend() < 0 && dlt_user.dlt_log_handle >= 0)
{
dlt_log(LOG_WARNING, "Failed to queue resending.\n");
}
@@ -3135,7 +3145,7 @@ int dlt_user_log_send_register_context(DltContextData *log)
DLT_SEM_FREE();
- if(dlt_user_queue_resend() < 0)
+ if(dlt_user_queue_resend() < 0 && dlt_user.dlt_log_handle >= 0)
{
dlt_log(LOG_WARNING, "Failed to queue resending.\n");
}