diff options
author | Alexander Wenzel <Alexander.AW.Wenzel@bmw.de> | 2013-11-28 07:49:56 +0100 |
---|---|---|
committer | Alexander Wenzel <Alexander.AW.Wenzel@bmw.de> | 2014-01-10 07:15:36 +0100 |
commit | c48c1d23f6b27a459db55d64e87dbbc0394c0cf6 (patch) | |
tree | b0852a74bde1a67859bb53b34ddba0466c1d466a /src | |
parent | b0c6acf7f20d843b6928ba53a88aa2456bade754 (diff) | |
download | DLT-daemon-c48c1d23f6b27a459db55d64e87dbbc0394c0cf6.tar.gz |
Reduce usage of SEM_LOCK in application library and reset pointers.
Signed-off-by: Alexander Wenzel <Alexander.AW.Wenzel@bmw.de>
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/dlt_user.c | 103 |
1 files changed, 59 insertions, 44 deletions
diff --git a/src/lib/dlt_user.c b/src/lib/dlt_user.c index 36dac77..e4368f7 100644 --- a/src/lib/dlt_user.c +++ b/src/lib/dlt_user.c @@ -788,6 +788,9 @@ int dlt_register_context_ll_ts(DltContext *handle, const char *contextid, const dlt_user.dlt_ll_ts[i].log_level = DLT_USER_INITIAL_LOG_LEVEL; dlt_user.dlt_ll_ts[i].trace_status = DLT_USER_INITIAL_TRACE_STATUS; + dlt_user.dlt_ll_ts[i].log_level_ptr = 0; + dlt_user.dlt_ll_ts[i].trace_status_ptr = 0; + dlt_user.dlt_ll_ts[i].context_description = 0; dlt_user.dlt_ll_ts[i].injection_table = 0; @@ -829,6 +832,9 @@ int dlt_register_context_ll_ts(DltContext *handle, const char *contextid, const dlt_user.dlt_ll_ts[i].log_level = DLT_USER_INITIAL_LOG_LEVEL; dlt_user.dlt_ll_ts[i].trace_status = DLT_USER_INITIAL_TRACE_STATUS; + dlt_user.dlt_ll_ts[i].log_level_ptr = 0; + dlt_user.dlt_ll_ts[i].trace_status_ptr = 0; + dlt_user.dlt_ll_ts[i].context_description = 0; dlt_user.dlt_ll_ts[i].injection_table = 0; @@ -863,6 +869,25 @@ int dlt_register_context_ll_ts(DltContext *handle, const char *contextid, const dlt_user.dlt_ll_ts[dlt_user.dlt_ll_ts_num_entries].context_description[desc_len]='\0'; } + if(dlt_user.dlt_ll_ts[dlt_user.dlt_ll_ts_num_entries].log_level_ptr == 0) + { + dlt_user.dlt_ll_ts[dlt_user.dlt_ll_ts_num_entries].log_level_ptr = malloc(sizeof(int8_t)); + if(dlt_user.dlt_ll_ts[dlt_user.dlt_ll_ts_num_entries].log_level_ptr == 0) + { + DLT_SEM_FREE(); + return -1; + } + } + if(dlt_user.dlt_ll_ts[dlt_user.dlt_ll_ts_num_entries].trace_status_ptr == 0) + { + dlt_user.dlt_ll_ts[dlt_user.dlt_ll_ts_num_entries].trace_status_ptr = malloc(sizeof(int8_t)); + if(dlt_user.dlt_ll_ts[dlt_user.dlt_ll_ts_num_entries].trace_status_ptr == 0) + { + DLT_SEM_FREE(); + return -1; + } + } + if (loglevel!=DLT_USER_LOG_LEVEL_NOT_SET) { dlt_user.dlt_ll_ts[dlt_user.dlt_ll_ts_num_entries].log_level = loglevel; @@ -878,8 +903,14 @@ int dlt_register_context_ll_ts(DltContext *handle, const char *contextid, const dlt_set_id(handle->contextID, contextid); handle->log_level_pos = dlt_user.dlt_ll_ts_num_entries; + handle->log_level_ptr = dlt_user.dlt_ll_ts[dlt_user.dlt_ll_ts_num_entries].log_level_ptr; + handle->trace_status_ptr = dlt_user.dlt_ll_ts[dlt_user.dlt_ll_ts_num_entries].trace_status_ptr; + log.context_description = dlt_user.dlt_ll_ts[dlt_user.dlt_ll_ts_num_entries].context_description; + *(dlt_user.dlt_ll_ts[dlt_user.dlt_ll_ts_num_entries].log_level_ptr) = dlt_user.dlt_ll_ts[dlt_user.dlt_ll_ts_num_entries].log_level; + *(dlt_user.dlt_ll_ts[dlt_user.dlt_ll_ts_num_entries].trace_status_ptr) = dlt_user.dlt_ll_ts[dlt_user.dlt_ll_ts_num_entries].trace_status = tracestatus; + if (loglevel!=DLT_USER_LOG_LEVEL_NOT_SET) { log.log_level = loglevel; @@ -960,6 +991,9 @@ int dlt_unregister_context(DltContext *handle) DLT_SEM_LOCK(); + handle->log_level_ptr = 0; + handle->trace_status_ptr = 0; + if (dlt_user.dlt_ll_ts) { /* Clear and free local stored context information */ @@ -973,6 +1007,18 @@ int dlt_unregister_context(DltContext *handle) free(dlt_user.dlt_ll_ts[handle->log_level_pos].context_description); } + if (dlt_user.dlt_ll_ts[handle->log_level_pos].log_level_ptr!=0) + { + free(dlt_user.dlt_ll_ts[handle->log_level_pos].log_level_ptr); + dlt_user.dlt_ll_ts[handle->log_level_pos].log_level_ptr = 0; + } + + if (dlt_user.dlt_ll_ts[handle->log_level_pos].trace_status_ptr!=0) + { + free(dlt_user.dlt_ll_ts[handle->log_level_pos].trace_status_ptr); + dlt_user.dlt_ll_ts[handle->log_level_pos].trace_status_ptr = 0; + } + dlt_user.dlt_ll_ts[handle->log_level_pos].context_description = 0; if (dlt_user.dlt_ll_ts[handle->log_level_pos].injection_table) @@ -1031,6 +1077,10 @@ int dlt_set_application_ll_ts_limit(DltLogLevelType loglevel, DltTraceStatusType { dlt_user.dlt_ll_ts[i].log_level = loglevel; dlt_user.dlt_ll_ts[i].trace_status = tracestatus; + if(dlt_user.dlt_ll_ts[i].log_level_ptr) + *(dlt_user.dlt_ll_ts[i].log_level_ptr) = loglevel; + if(dlt_user.dlt_ll_ts[i].trace_status_ptr) + *(dlt_user.dlt_ll_ts[i].trace_status_ptr) = tracestatus; } DLT_SEM_FREE(); @@ -1196,11 +1246,8 @@ int dlt_user_log_write_start_id(DltContext *handle, DltContextData *log,DltLogLe return -1; } - DLT_SEM_LOCK(); - - if ((loglevel<=(int)(dlt_user.dlt_ll_ts[handle->log_level_pos].log_level) ) && (loglevel!=0)) + if (handle->log_level_ptr && (loglevel<=(int)*(handle->log_level_ptr) ) && (loglevel!=0)) { - DLT_SEM_FREE(); log->args_num = 0; log->log_level = loglevel; @@ -1221,11 +1268,6 @@ int dlt_user_log_write_start_id(DltContext *handle, DltContextData *log,DltLogLe else log->size=0; return 1; } - else - { - DLT_SEM_FREE(); - return 0; - } return -1; } @@ -1973,17 +2015,14 @@ int dlt_user_trace_network_segmented_start(uint16_t *id, DltContext *handle, Dlt return -1; } - DLT_SEM_LOCK(); if (dlt_user.dlt_ll_ts==0) { - DLT_SEM_FREE(); return -1; } - if (dlt_user.dlt_ll_ts[handle->log_level_pos].trace_status==DLT_TRACE_STATUS_ON) + if (handle->trace_status_ptr && *(handle->trace_status_ptr)==DLT_TRACE_STATUS_ON) { - DLT_SEM_FREE(); log.args_num = 0; log.trace_status = nw_trace_type; @@ -2039,10 +2078,6 @@ int dlt_user_trace_network_segmented_start(uint16_t *id, DltContext *handle, Dlt /* Send log */ return dlt_user_log_send_log(&log, DLT_TYPE_NW_TRACE); } - else - { - DLT_SEM_FREE(); - } return 0; } @@ -2066,17 +2101,13 @@ int dlt_user_trace_network_segmented_segment(uint16_t id, DltContext *handle, Dl return -1; } - DLT_SEM_LOCK(); - if (dlt_user.dlt_ll_ts==0) { - DLT_SEM_FREE(); return -1; } - if (dlt_user.dlt_ll_ts[handle->log_level_pos].trace_status==DLT_TRACE_STATUS_ON) + if (handle->trace_status_ptr && *(handle->trace_status_ptr)==DLT_TRACE_STATUS_ON) { - DLT_SEM_FREE(); log.args_num = 0; log.trace_status = nw_trace_type; @@ -2109,10 +2140,6 @@ int dlt_user_trace_network_segmented_segment(uint16_t id, DltContext *handle, Dl /* Send log */ return dlt_user_log_send_log(&log, DLT_TYPE_NW_TRACE); } - else - { - DLT_SEM_FREE(); - } /* Allow other threads to log between chunks */ pthread_yield(); @@ -2135,17 +2162,13 @@ int dlt_user_trace_network_segmented_end(uint16_t id, DltContext *handle, DltNet - DLT_SEM_LOCK(); - if (dlt_user.dlt_ll_ts==0) { - DLT_SEM_FREE(); return -1; } - if (dlt_user.dlt_ll_ts[handle->log_level_pos].trace_status==DLT_TRACE_STATUS_ON) + if (handle->trace_status_ptr && *(handle->trace_status_ptr)==DLT_TRACE_STATUS_ON) { - DLT_SEM_FREE(); log.args_num = 0; log.trace_status = nw_trace_type; @@ -2166,10 +2189,6 @@ int dlt_user_trace_network_segmented_end(uint16_t id, DltContext *handle, DltNet /* Send log */ return dlt_user_log_send_log(&log, DLT_TYPE_NW_TRACE); } - else - { - DLT_SEM_FREE(); - } return 0; } @@ -2389,17 +2408,13 @@ int dlt_user_trace_network_truncated(DltContext *handle, DltNetworkTraceType nw_ */ - DLT_SEM_LOCK(); - if (dlt_user.dlt_ll_ts==0) { - DLT_SEM_FREE(); return -1; } - if (dlt_user.dlt_ll_ts[handle->log_level_pos].trace_status==DLT_TRACE_STATUS_ON) + if (handle->trace_status_ptr && *(handle->trace_status_ptr)==DLT_TRACE_STATUS_ON) { - DLT_SEM_FREE(); log.args_num = 0; log.trace_status = nw_trace_type; @@ -2467,10 +2482,6 @@ int dlt_user_trace_network_truncated(DltContext *handle, DltNetworkTraceType nw_ /* Send log */ return dlt_user_log_send_log(&log, DLT_TYPE_NW_TRACE); } - else - { - DLT_SEM_FREE(); - } return 0; } @@ -3526,6 +3537,10 @@ int dlt_user_log_check_user_message(void) { dlt_user.dlt_ll_ts[usercontextll->log_level_pos].log_level = usercontextll->log_level; dlt_user.dlt_ll_ts[usercontextll->log_level_pos].trace_status = usercontextll->trace_status; + if(dlt_user.dlt_ll_ts[usercontextll->log_level_pos].log_level_ptr) + *(dlt_user.dlt_ll_ts[usercontextll->log_level_pos].log_level_ptr) = usercontextll->log_level; + if(dlt_user.dlt_ll_ts[usercontextll->log_level_pos].trace_status_ptr) + *(dlt_user.dlt_ll_ts[usercontextll->log_level_pos].trace_status_ptr) = usercontextll->trace_status; } } |