diff options
author | Saya Sugiura <ssugiura@jp.adit-jv.com> | 2020-02-11 10:24:39 +0900 |
---|---|---|
committer | Saya Sugiura <39760799+ssugiura@users.noreply.github.com> | 2020-07-06 10:04:07 +0900 |
commit | 404bc3934bcb0bbb5671a84ecb45c95069bc1ab3 (patch) | |
tree | fb419eea29e1d8dc99dfdf7f5e6762aaf1934e01 /src/lib | |
parent | 3dca373d843213f03c95df56e36b16d6b83fd58f (diff) | |
download | DLT-daemon-404bc3934bcb0bbb5671a84ecb45c95069bc1ab3.tar.gz |
network trace: Add mqueue verification
There is some OS (e.g. Android) which doesn't support message queue.
Since network trace uses it as IPC, we need to disable it if following
calls are not available:
mq_open, mq_close, mq_unlink, mq_send, mq_receive
Signed-off-by: Saya Sugiura <ssugiura@jp.adit-jv.com>
Signed-off-by: KHANH LUONG HONG DUY <khanh.luonghongduy@vn.bosch.com>
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/dlt_user.c | 47 |
1 files changed, 29 insertions, 18 deletions
diff --git a/src/lib/dlt_user.c b/src/lib/dlt_user.c index 7188c05..901dc21 100644 --- a/src/lib/dlt_user.c +++ b/src/lib/dlt_user.c @@ -104,16 +104,21 @@ enum StringType UTF8_STRING = 1 }; +#define DLT_UNUSED(x) (void)(x) + +/* Network trace */ +#ifdef DLT_NETWORK_TRACE_ENABLE +#define DLT_USER_SEGMENTED_THREAD (1<<2) + /* Segmented Network Trace */ #define DLT_MAX_TRACE_SEGMENT_SIZE 1024 #define DLT_MESSAGE_QUEUE_NAME "/dlt_message_queue" #define DLT_DELAYED_RESEND_INDICATOR_PATTERN 0xFFFF -#define DLT_UNUSED(x) (void)(x) - /* Mutex to wait on while message queue is not initialized */ pthread_mutex_t mq_mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t mq_init_condition; +#endif /* DLT_NETWORK_TRACE_ENABLE */ void dlt_lock_mutex(pthread_mutex_t *mutex) { @@ -160,10 +165,6 @@ static DltReturnValue dlt_user_print_msg(DltMessage *msg, DltContextData *log); static DltReturnValue dlt_user_log_check_user_message(void); static void dlt_user_log_reattach_to_daemon(void); static DltReturnValue dlt_user_log_send_overflow(void); -#ifndef __ANDROID_API__ -static void dlt_user_trace_network_segmented_thread(void *unused); -static void dlt_user_trace_network_segmented_thread_segmenter(s_segmented_data *data); -#endif static DltReturnValue dlt_user_log_out_error_handling(void *ptr1, size_t len1, void *ptr2, @@ -174,6 +175,10 @@ static void dlt_user_cleanup_handler(void *arg); static int dlt_start_threads(); static void dlt_stop_threads(); static void dlt_fork_child_fork_handler(); +#ifdef DLT_NETWORK_TRACE_ENABLE +static void dlt_user_trace_network_segmented_thread(void *unused); +static void dlt_user_trace_network_segmented_thread_segmenter(s_segmented_data *data); +#endif static DltReturnValue dlt_user_log_write_string_utils(DltContextData *log, const char *text, const enum StringType type); @@ -402,7 +407,7 @@ DltReturnValue dlt_init(void) #endif -#ifndef __ANDROID_API__ +#ifdef DLT_NETWORK_TRACE_ENABLE /* These will be lazy initialized only when needed */ dlt_user.dlt_segmented_queue_read_handle = -1; dlt_user.dlt_segmented_queue_write_handle = -1; @@ -459,7 +464,7 @@ DltReturnValue dlt_init_file(const char *name) return DLT_RETURN_OK; } -#ifndef __ANDROID_API__ +#ifdef DLT_NETWORK_TRACE_ENABLE DltReturnValue dlt_init_message_queue(void) { dlt_lock_mutex(&mq_mutex); @@ -524,7 +529,7 @@ DltReturnValue dlt_init_message_queue(void) dlt_unlock_mutex(&mq_mutex); return DLT_RETURN_OK; } -#endif /*__ANDROID_API__*/ +#endif /* DLT_NETWORK_TRACE_ENABLE */ DltReturnValue dlt_init_common(void) { @@ -940,7 +945,7 @@ DltReturnValue dlt_free(void) dlt_env_free_ll_set(&dlt_user.initial_ll_set); DLT_SEM_FREE(); -#ifndef __ANDROID_API__ +#ifdef DLT_NETWORK_TRACE_ENABLE char queue_name[NAME_MAX]; snprintf(queue_name, NAME_MAX, "%s.%d", DLT_MESSAGE_QUEUE_NAME, getpid()); @@ -962,7 +967,7 @@ DltReturnValue dlt_free(void) dlt_user.dlt_segmented_queue_read_handle = DLT_FD_INIT; pthread_cond_destroy(&mq_init_condition); -#endif /* ifndef __ANDROID_API__ */ +#endif /* DLT_NETWORK_TRACE_ENABLE */ sem_destroy(&dlt_mutex); /* allow the user app to do dlt_init() again. */ @@ -2652,7 +2657,7 @@ DltReturnValue dlt_register_log_level_changed_callback(DltContext *handle, * NW Trace related */ - +#ifdef DLT_NETWORK_TRACE_ENABLE int check_buffer(void) { int total_size, used_size; @@ -2901,7 +2906,6 @@ DltReturnValue dlt_user_trace_network_segmented_end(uint32_t id, DltContext *han return DLT_RETURN_OK; } -#ifndef __ANDROID_API__ void dlt_user_trace_network_segmented_thread(void *unused) { /* Unused on purpose. */ @@ -3201,7 +3205,7 @@ DltReturnValue dlt_user_trace_network_truncated(DltContext *handle, return DLT_RETURN_OK; } -#endif /*__ANDROID_API__*/ +#endif /* DLT_NETWORK_TRACE_ENABLE */ DltReturnValue dlt_log_string(DltContext *handle, DltLogLevelType loglevel, const char *text) { @@ -3466,8 +3470,12 @@ DltReturnValue dlt_disable_local_print(void) static void dlt_user_cleanup_handler(void *arg) { DLT_UNUSED(arg); /* Satisfy compiler */ + +#ifdef DLT_NETWORK_TRACE_ENABLE /* unlock the message queue */ dlt_unlock_mutex(&mq_mutex); +#endif + /* unlock DLT (dlt_mutex) */ DLT_SEM_FREE(); } @@ -4645,7 +4653,10 @@ void dlt_stop_threads() #ifndef __ANDROID_API__ dlt_housekeeperthread_result = pthread_cancel(dlt_housekeeperthread_handle); #else + +#ifdef DLT_NETWORK_TRACE_ENABLE dlt_lock_mutex(&mq_mutex); +#endif /* DLT_NETWORK_TRACE_ENABLE */ dlt_housekeeperthread_result = pthread_kill(dlt_housekeeperthread_handle, SIGKILL); dlt_user_cleanup_handler(NULL); #endif @@ -4662,7 +4673,7 @@ void dlt_stop_threads() strerror(dlt_housekeeperthread_result)); } -#ifndef __ANDROID_API__ +#ifdef DLT_NETWORK_TRACE_ENABLE int dlt_segmented_nwt_result = 0; if (dlt_user.dlt_segmented_nwt_handle) { @@ -4677,7 +4688,7 @@ void dlt_stop_threads() "ERROR pthread_cancel(dlt_user.dlt_segmented_nwt_handle): %s\n", strerror(dlt_segmented_nwt_result)); } -#endif /* ifndef __ANDROID_API__ */ +#endif /* DLT_NETWORK_TRACE_ENABLE */ /* make sure that the threads really finished working */ if ((dlt_housekeeperthread_result == 0) && dlt_housekeeperthread_handle) { joined = pthread_join(dlt_housekeeperthread_handle, NULL); @@ -4690,7 +4701,7 @@ void dlt_stop_threads() dlt_housekeeperthread_handle = 0; /* set to invalid */ } -#ifndef __ANDROID_API__ +#ifdef DLT_NETWORK_TRACE_ENABLE if ((dlt_segmented_nwt_result == 0) && dlt_user.dlt_segmented_nwt_handle) { joined = pthread_join(dlt_user.dlt_segmented_nwt_handle, NULL); @@ -4701,7 +4712,7 @@ void dlt_stop_threads() dlt_user.dlt_segmented_nwt_handle = 0; /* set to invalid */ } -#endif /* ifndef __ANDROID_API__ */ +#endif /* DLT_NETWORK_TRACE_ENABLE */ } static void dlt_fork_child_fork_handler() |