summaryrefslogtreecommitdiff
path: root/src/lib/dlt_user.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/dlt_user.c')
-rwxr-xr-xsrc/lib/dlt_user.c115
1 files changed, 35 insertions, 80 deletions
diff --git a/src/lib/dlt_user.c b/src/lib/dlt_user.c
index 0764efc..4bab5fc 100755
--- a/src/lib/dlt_user.c
+++ b/src/lib/dlt_user.c
@@ -159,9 +159,17 @@ int dlt_init(void)
dlt_user.dlt_is_file = 0;
dlt_user.overflow = 0;
+ /* init shared memory */
+ if (dlt_shm_init_client(&dlt_user.dlt_shm,DLT_SHM_KEY) < 0)
+ {
+ sprintf(str,"Loging disabled, Shared memory %d cannot be created!\n",DLT_SHM_KEY);
+ dlt_log(LOG_WARNING, str);
+ return 0;
+ }
+
/* create and open DLT user FIFO */
sprintf(filename,"%s/dlt%d",DLT_USER_DIR,getpid());
-
+
/* Try to delete existing pipe, ignore result of unlink */
unlink(filename);
@@ -197,12 +205,18 @@ int dlt_init(void)
return -1;
}
- /* Initialize thread */
+ /* Set default thread stack size */
if (pthread_attr_init(&dlt_receiverthread_attr)<0)
{
- dlt_log(LOG_WARNING, "Initialization of thread failed!\n");
- return -1;
- }
+ dlt_log(LOG_WARNING, "Initialization of default thread stack size failed!\n");
+ }
+ else
+ {
+ if (pthread_attr_setstacksize(&dlt_receiverthread_attr,DLT_USER_RECEIVERTHREAD_STACKSIZE)<0)
+ {
+ dlt_log(LOG_WARNING, "Setting of default thread stack size failed!\n");
+ }
+ }
/* Start receiver thread */
if (pthread_create(&(dlt_receiverthread_handle),
@@ -302,12 +316,6 @@ int dlt_init_common(void)
dlt_user.dlt_ll_ts_max_num_entries = 0;
dlt_user.dlt_ll_ts_num_entries = 0;
- if (dlt_ringbuffer_init(&(dlt_user.rbuf), DLT_USER_RINGBUFFER_SIZE)==-1)
- {
- dlt_user_initialised = 0;
- return -1;
- }
-
signal(SIGPIPE,SIG_IGN); /* ignore pipe signals */
atexit(dlt_user_atexit_handler);
@@ -352,6 +360,9 @@ int dlt_free(void)
unlink(filename);
}
+ /* free shared memory */
+ dlt_shm_free_client(&dlt_user.dlt_shm);
+
if (dlt_user.dlt_log_handle!=-1)
{
/* close log file/output fifo to daemon */
@@ -362,9 +373,6 @@ int dlt_free(void)
/* Ignore return value */
dlt_receiver_free(&(dlt_user.receiver));
- /* Ignore return value */
- dlt_ringbuffer_free(&(dlt_user.rbuf));
-
if (dlt_user.dlt_ll_ts)
{
for (i=0;i<dlt_user.dlt_ll_ts_max_num_entries;i++)
@@ -846,16 +854,8 @@ int dlt_forward_msg(void *msgdata,size_t size)
/* store message in ringbuffer, if an error has occured */
if (ret!=DLT_RETURN_OK)
{
- DLT_SEM_LOCK();
-
- if (dlt_ringbuffer_put3(&(dlt_user.rbuf),
- &(userheader), sizeof(DltUserHeader),
- msgdata, size, 0, 0)==-1)
- {
- dlt_log(LOG_ERR,"Storing message to history buffer failed! Message discarded.\n");
- }
-
- DLT_SEM_FREE();
+ /* message could not be sent */
+ /* in old implementation messages was saved in ringbuffer */
}
switch (ret)
@@ -2151,26 +2151,20 @@ int dlt_user_log_send_log(DltContextData *log, int mtype)
}
}
+ dlt_shm_push(&dlt_user.dlt_shm,msg.headerbuffer+sizeof(DltStorageHeader), msg.headersize-sizeof(DltStorageHeader),
+ log->buffer, log->size,0,0);
+
/* log to FIFO */
ret = dlt_user_log_out3(dlt_user.dlt_log_handle,
&(userheader), sizeof(DltUserHeader),
- msg.headerbuffer+sizeof(DltStorageHeader), msg.headersize-sizeof(DltStorageHeader),
- log->buffer, log->size);
-
+ 0, 0,
+ 0, 0);
+
/* store message in ringbuffer, if an error has occured */
if (ret!=DLT_RETURN_OK)
{
- DLT_SEM_LOCK();
-
- if (dlt_ringbuffer_put3(&(dlt_user.rbuf),
- &(userheader), sizeof(DltUserHeader),
- msg.headerbuffer+sizeof(DltStorageHeader), msg.headersize-sizeof(DltStorageHeader),
- log->buffer, log->size)==-1)
- {
- dlt_log(LOG_ERR,"Storing message to history buffer failed! Message discarded.\n");
- }
-
- DLT_SEM_FREE();
+ /* in old implementation message was stored in ringbuffer
+ * if it was not able to be sent. */
}
switch (ret)
@@ -2666,14 +2660,10 @@ int dlt_user_log_check_user_message(void)
void dlt_user_log_reattach_to_daemon(void)
{
- int num, count, reregistered=0;
-
- uint8_t buf[DLT_USER_RINGBUFFER_SIZE];
- size_t size;
+ int num, reregistered=0;
DltContext handle;
DltContextData log_new;
- DltReturnValue ret;
if (dlt_user.dlt_log_handle<0)
{
@@ -2726,43 +2716,8 @@ void dlt_user_log_reattach_to_daemon(void)
if (reregistered==1)
{
- /* Send content of ringbuffer */
- DLT_SEM_LOCK();
- count = dlt_user.rbuf.count;
- DLT_SEM_FREE();
-
- for (num=0;num<count;num++)
- {
-
- DLT_SEM_LOCK();
- dlt_ringbuffer_get(&(dlt_user.rbuf),buf,&size);
- DLT_SEM_FREE();
-
- if (size>0)
- {
- /* log to FIFO */
- ret = dlt_user_log_out3(dlt_user.dlt_log_handle, buf,size,0,0,0,0);
-
- /* in case of error, push message back to ringbuffer */
- if (ret!=DLT_RETURN_OK)
- {
- DLT_SEM_LOCK();
- if (dlt_ringbuffer_put(&(dlt_user.rbuf), buf, size)==-1)
- {
- dlt_log(LOG_ERR,"Error pushing back message to history buffer. Message discarded.\n");
- }
- DLT_SEM_FREE();
-
- /* In case of: data could not be written, set overflow flag */
- if (ret==DLT_RETURN_PIPE_FULL)
- {
- dlt_user.overflow = 1;
- }
- }
- }
-
- }
- }
+ /* In old implementation Send content of ringbuffer */
+ }
}
}
}