summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSaya Sugiura <ssugiura@jp.adit-jv.com>2019-01-08 16:45:04 +0900
committerSaya Sugiura <ssugiura@jp.adit-jv.com>2019-05-06 15:55:01 +0900
commitdf6fc2a1ce9f3a1778e9c8e14c800cd2ad96e96e (patch)
tree6356575d4f9e6461769f7b40b72829366feb37b4 /src
parent4fe69b0927f4c5d0cb3b3ae4fa64500db22b13d0 (diff)
downloadDLT-daemon-df6fc2a1ce9f3a1778e9c8e14c800cd2ad96e96e.tar.gz
POSIX: Replace usleep with nanosleep
Signed-off-by: Saya Sugiura <ssugiura@jp.adit-jv.com>
Diffstat (limited to 'src')
-rw-r--r--src/console/dlt-control-common.h3
-rw-r--r--src/console/dlt-control.c5
-rw-r--r--src/console/logstorage/dlt-logstorage-udev.c5
-rw-r--r--src/examples/dlt-example-user-common-api.c12
-rw-r--r--src/examples/dlt-example-user-func.c12
-rw-r--r--src/examples/dlt-example-user.c12
-rw-r--r--src/kpi/dlt-kpi.c15
-rw-r--r--src/kpi/dlt-kpi.h3
-rw-r--r--src/lib/dlt_filetransfer.c8
-rw-r--r--src/lib/dlt_user.c17
-rw-r--r--src/lib/dlt_user_cfg.h8
-rw-r--r--src/tests/dlt-test-multi-process.c12
-rw-r--r--src/tests/dlt-test-stress-user.c5
-rw-r--r--src/tests/dlt-test-stress.c24
14 files changed, 106 insertions, 35 deletions
diff --git a/src/console/dlt-control-common.h b/src/console/dlt-control-common.h
index 0bd7deb..f2dc38f 100644
--- a/src/console/dlt-control-common.h
+++ b/src/console/dlt-control-common.h
@@ -50,6 +50,9 @@
#define DLT_CTRL_DEFAULT_ECUID "ECU1"
+#define NANOSEC_PER_MILLISEC 1000000
+#define NANOSEC_PER_SEC 1000000000
+
/* To be used as Dlt Message body when sending to DLT daemon */
typedef struct
{
diff --git a/src/console/dlt-control.c b/src/console/dlt-control.c
index a1eb408..19e4b36 100644
--- a/src/console/dlt-control.c
+++ b/src/console/dlt-control.c
@@ -232,6 +232,7 @@ int main(int argc, char *argv[])
int c;
int index;
char *endptr = NULL;
+ struct timespec ts;
/* Initialize dltdata */
dltdata.vflag = 0;
@@ -641,7 +642,9 @@ int main(int argc, char *argv[])
/*dlt_client_main_loop(&dltclient, &dltdata, dltdata.vflag); */
/* Wait timeout */
- usleep(dltdata.tvalue * 1000);
+ ts.tv_sec = (dltdata.tvalue * NANOSEC_PER_MILLISEC) / NANOSEC_PER_SEC;
+ ts.tv_nsec = (dltdata.tvalue * NANOSEC_PER_MILLISEC) % NANOSEC_PER_SEC;
+ nanosleep(&ts, NULL);
}
/* Dlt Client Cleanup */
diff --git a/src/console/logstorage/dlt-logstorage-udev.c b/src/console/logstorage/dlt-logstorage-udev.c
index 578f1fa..e50e660 100644
--- a/src/console/logstorage/dlt-logstorage-udev.c
+++ b/src/console/logstorage/dlt-logstorage-udev.c
@@ -207,6 +207,7 @@ static int logstorage_udev_udevd_callback(void)
DltLogstorageCtrl *lctrl = get_logstorage_control();
LogstorageCtrlUdev *prvt = NULL;
struct udev_device *partition = NULL;
+ struct timespec ts;
if (!lctrl) {
pr_error("Not able to get logstorage control instance.\n");
@@ -247,7 +248,9 @@ static int logstorage_udev_udevd_callback(void)
* Then, udev is only interesting to simplify the check on new devices,
* and/or for hot unplug (without unmount).
*/
- usleep(500 * 1000);
+ ts.tv_sec = 0;
+ ts.tv_nsec = 500 * NANOSEC_PER_MILLISEC;
+ nanosleep(&ts, NULL);
ret = check_mountpoint_from_partition(EVENT_MOUNTED, partition);
}
else if (strncmp(action, "remove", sizeof("remove")) == 0)
diff --git a/src/examples/dlt-example-user-common-api.c b/src/examples/dlt-example-user-common-api.c
index 880ea97..65f3b3c 100644
--- a/src/examples/dlt-example-user-common-api.c
+++ b/src/examples/dlt-example-user-common-api.c
@@ -112,6 +112,7 @@ int main(int argc, char *argv[])
char *text;
int num, maxnum;
int delay;
+ struct timespec ts;
int state = -1, newstate;
@@ -199,9 +200,9 @@ int main(int argc, char *argv[])
maxnum = 10;
if (dvalue)
- delay = atoi(dvalue) * 1000;
+ delay = atoi(dvalue) * 1000000;
else
- delay = 500 * 1000;
+ delay = 500 * 1000000;
if (gflag) {
/* DLT messages to test Fibex non-verbose description: dlt-example-non-verbose.xml */
@@ -258,8 +259,11 @@ int main(int argc, char *argv[])
/* Verbose mode */
DLT_LOG2(mycontext, DLT_LOG_WARN, DLT_INT(num), DLT_STRING(text));
- if (delay > 0)
- usleep(delay);
+ if (delay > 0) {
+ ts.tv_sec = delay / 1000000000;
+ ts.tv_nsec = delay % 1000000000;
+ nanosleep(&ts, NULL);
+ }
}
sleep(1);
diff --git a/src/examples/dlt-example-user-func.c b/src/examples/dlt-example-user-func.c
index b29ff9f..96f98c5 100644
--- a/src/examples/dlt-example-user-func.c
+++ b/src/examples/dlt-example-user-func.c
@@ -118,6 +118,7 @@ int main(int argc, char *argv[])
char *text;
int num, maxnum;
int delay;
+ struct timespec ts;
opterr = 0;
@@ -206,9 +207,9 @@ int main(int argc, char *argv[])
maxnum = 10;
if (dvalue)
- delay = atoi(dvalue) * 1000;
+ delay = atoi(dvalue) * 1000000;
else
- delay = 500 * 1000;
+ delay = 500 * 1000000;
if (gflag) {
/* DLT messages to test Fibex non-verbose description: dlt-example-non-verbose.xml */
@@ -257,8 +258,11 @@ int main(int argc, char *argv[])
dlt_user_log_write_finish(&mycontextdata);
}
- if (delay > 0)
- usleep(delay);
+ if (delay > 0) {
+ ts.tv_sec = delay / 1000000000;
+ ts.tv_nsec = delay % 1000000000;
+ nanosleep(&ts, NULL);
+ }
}
dlt_unregister_context(&mycontext);
diff --git a/src/examples/dlt-example-user.c b/src/examples/dlt-example-user.c
index 19cf73f..45b9561 100644
--- a/src/examples/dlt-example-user.c
+++ b/src/examples/dlt-example-user.c
@@ -142,6 +142,7 @@ int main(int argc, char *argv[])
char *text;
int num, maxnum;
int delay;
+ struct timespec ts;
int state = -1, newstate;
@@ -311,9 +312,9 @@ int main(int argc, char *argv[])
maxnum = 10;
if (dvalue)
- delay = atoi(dvalue) * 1000;
+ delay = atoi(dvalue) * 1000000;
else
- delay = 500 * 1000;
+ delay = 500 * 1000000;
if (tvalue)
dlt_set_resend_timeout_atexit(atoi(tvalue));
@@ -378,8 +379,11 @@ int main(int argc, char *argv[])
DLT_LOG(mycontext1, lvalue, DLT_RAW(text, rvalue));
}
- if (delay > 0)
- usleep(delay);
+ if (delay > 0) {
+ ts.tv_sec = delay / 1000000000;
+ ts.tv_nsec = delay % 1000000000;
+ nanosleep(&ts, NULL);
+ }
}
sleep(1);
diff --git a/src/kpi/dlt-kpi.c b/src/kpi/dlt-kpi.c
index 0fbff3a..d9f9727 100644
--- a/src/kpi/dlt-kpi.c
+++ b/src/kpi/dlt-kpi.c
@@ -186,6 +186,7 @@ void *dlt_kpi_start_process_thread()
DltReturnValue dlt_kpi_process_loop()
{
static unsigned long int old_millis, sleep_millis, dif_millis;
+ struct timespec ts;
old_millis = get_millis();
@@ -201,7 +202,9 @@ DltReturnValue dlt_kpi_process_loop()
else
sleep_millis = config.process_log_interval - dif_millis;
- usleep(sleep_millis * 1000);
+ ts.tv_sec = (sleep_millis * NANOSEC_PER_MILLISEC) / NANOSEC_PER_SEC;
+ ts.tv_nsec = (sleep_millis * NANOSEC_PER_MILLISEC) % NANOSEC_PER_SEC;
+ nanosleep(&ts, NULL);
old_millis = get_millis();
}
@@ -424,6 +427,7 @@ void *dlt_kpi_start_irq_thread()
DltReturnValue dlt_kpi_irq_loop()
{
static unsigned long int old_millis, sleep_millis, dif_millis;
+ struct timespec ts;
old_millis = get_millis();
@@ -439,7 +443,9 @@ DltReturnValue dlt_kpi_irq_loop()
else
sleep_millis = config.irq_log_interval - dif_millis;
- usleep(sleep_millis * 1000);
+ ts.tv_sec = (sleep_millis * NANOSEC_PER_MILLISEC) / NANOSEC_PER_SEC;
+ ts.tv_nsec = (sleep_millis * NANOSEC_PER_MILLISEC) % NANOSEC_PER_SEC;
+ nanosleep(&ts, NULL);
old_millis = get_millis();
}
@@ -458,6 +464,7 @@ void *dlt_kpi_start_check_thread()
DltReturnValue dlt_kpi_check_loop()
{
static unsigned long int old_millis, sleep_millis, dif_millis;
+ struct timespec ts;
old_millis = get_millis();
@@ -473,7 +480,9 @@ DltReturnValue dlt_kpi_check_loop()
else
sleep_millis = config.check_log_interval - dif_millis;
- usleep(sleep_millis * 1000);
+ ts.tv_sec = (sleep_millis * NANOSEC_PER_MILLISEC) / NANOSEC_PER_SEC;
+ ts.tv_nsec = (sleep_millis * NANOSEC_PER_MILLISEC) % NANOSEC_PER_SEC;
+ nanosleep(&ts, NULL);
old_millis = get_millis();
}
diff --git a/src/kpi/dlt-kpi.h b/src/kpi/dlt-kpi.h
index ff647d4..4cefb73 100644
--- a/src/kpi/dlt-kpi.h
+++ b/src/kpi/dlt-kpi.h
@@ -40,6 +40,9 @@
#define COMMAND_LINE_SIZE 1024
+#define NANOSEC_PER_MILLISEC 1000000
+#define NANOSEC_PER_SEC 1000000000
+
/* STRUCTURES */
typedef struct
{
diff --git a/src/lib/dlt_filetransfer.c b/src/lib/dlt_filetransfer.c
index 7844de2..736a7d6 100644
--- a/src/lib/dlt_filetransfer.c
+++ b/src/lib/dlt_filetransfer.c
@@ -68,6 +68,9 @@
#define DLT_FILETRANSFER_TRANSFER_ALL_PACKAGES INT_MAX
+#define NANOSEC_PER_MILLISEC 1000000
+#define NANOSEC_PER_SEC 1000000000
+
/*!Buffer for dlt file transfer. The size is defined by BUFFER_SIZE */
unsigned char buffer[BUFFER_SIZE];
@@ -194,7 +197,10 @@ int isFile (const char *file)
*/
void doTimeout(int timeout)
{
- usleep(timeout * 1000);
+ struct timespec ts;
+ ts.tv_sec = (timeout * NANOSEC_PER_MILLISEC) / NANOSEC_PER_SEC;
+ ts.tv_nsec = (timeout * NANOSEC_PER_MILLISEC) % NANOSEC_PER_SEC;
+ nanosleep(&ts, NULL);
}
/*!Checks free space of the user buffer */
diff --git a/src/lib/dlt_user.c b/src/lib/dlt_user.c
index 1c1bbd8..1bddcfa 100644
--- a/src/lib/dlt_user.c
+++ b/src/lib/dlt_user.c
@@ -733,6 +733,7 @@ int dlt_user_atexit_blow_out_user_buffer(void)
{
int count, ret;
+ struct timespec ts;
uint32_t exitTime = dlt_uptime() + dlt_user.timeout_at_exit_handler;
@@ -770,7 +771,9 @@ int dlt_user_atexit_blow_out_user_buffer(void)
}
}
- usleep(DLT_USER_ATEXIT_RESEND_BUFFER_SLEEP);
+ ts.tv_sec = 0;
+ ts.tv_nsec = DLT_USER_ATEXIT_RESEND_BUFFER_SLEEP;
+ nanosleep(&ts, NULL);
}
DLT_SEM_LOCK();
@@ -2786,6 +2789,7 @@ DltReturnValue dlt_user_trace_network_segmented_segment(uint32_t id,
void *payload)
{
int ret = DLT_RETURN_ERROR;
+ struct timespec ts;
if ((nw_trace_type < DLT_NW_TRACE_IPC) || (nw_trace_type >= DLT_NW_TRACE_MAX)) {
dlt_vlog(LOG_ERR, "Network trace type %d is outside valid range", nw_trace_type);
@@ -2793,7 +2797,10 @@ DltReturnValue dlt_user_trace_network_segmented_segment(uint32_t id,
}
while (check_buffer() < 0) {
- usleep(1000 * 50); /* Wait 50ms */
+ /* Wait 50ms */
+ ts.tv_sec = 0;
+ ts.tv_nsec = 1000000*50;
+ nanosleep(&ts, NULL);
dlt_user_log_resend_buffer();
}
@@ -3478,6 +3485,7 @@ DltReturnValue dlt_disable_local_print(void)
void dlt_user_receiverthread_function(__attribute__((unused)) void *ptr)
{
+ struct timespec ts;
#ifdef linux
prctl(PR_SET_NAME, "dlt_receiver", 0, 0, 0);
#endif
@@ -3488,7 +3496,10 @@ void dlt_user_receiverthread_function(__attribute__((unused)) void *ptr)
/* Critical error */
dlt_log(LOG_CRIT, "Receiver thread encountered error condition\n");
- usleep(DLT_USER_RECEIVE_DELAY); /* delay */
+ /* delay */
+ ts.tv_sec = 0;
+ ts.tv_nsec = DLT_USER_RECEIVE_NDELAY;
+ nanosleep(&ts, NULL);
}
}
diff --git a/src/lib/dlt_user_cfg.h b/src/lib/dlt_user_cfg.h
index 5e43ee0..6d27ea0 100644
--- a/src/lib/dlt_user_cfg.h
+++ b/src/lib/dlt_user_cfg.h
@@ -128,8 +128,8 @@
/* default message id for non-verbose mode, if no message id was provided */
#define DLT_USER_DEFAULT_MSGID 0xffff
-/* delay in receiver routine in usec (100000 usec = 100ms) */
-#define DLT_USER_RECEIVE_DELAY 100000
+/* delay for receiver thread (nsec) */
+#define DLT_USER_RECEIVE_NDELAY (100000000)
/* Name of environment variable for local print mode */
#define DLT_USER_ENV_LOCAL_PRINT_MODE "DLT_LOCAL_PRINT_MODE"
@@ -137,8 +137,8 @@
/* 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 100000
+/* Sleeps between resending user buffer at exit in nsec (1000000 nsec = 1ms)*/
+#define DLT_USER_ATEXIT_RESEND_BUFFER_SLEEP 100000000
/* Retry interval for mq error in usec */
#define DLT_USER_MQ_ERROR_RETRY_INTERVAL 100000
diff --git a/src/tests/dlt-test-multi-process.c b/src/tests/dlt-test-multi-process.c
index 5b508f3..c5da2a6 100644
--- a/src/tests/dlt-test-multi-process.c
+++ b/src/tests/dlt-test-multi-process.c
@@ -292,9 +292,9 @@ void cleanup()
time_t mksleep_time(int delay, int fudge)
{
if (!fudge)
- return delay * 1000;
+ return delay*1000000;
else
- return (delay + rand() % fudge) * 1000;
+ return (delay+rand()%fudge)*1000000;
}
/**
@@ -305,7 +305,8 @@ void do_logging(s_thread_data *data)
DltContext mycontext;
char ctid[5];
char ctid_name[256];
-
+ struct timespec ts;
+ time_t sleep_time;
snprintf(ctid, 5, "%.2x", rand() & 0x0000ffff);
snprintf(ctid_name, 256, "Child %s in dlt-test-multi-process", ctid);
@@ -315,7 +316,10 @@ void do_logging(s_thread_data *data)
while (msgs_left-- > 0) {
DLT_LOG(mycontext, DLT_LOG_INFO, DLT_STRING(PAYLOAD_DATA));
- usleep(mksleep_time(data->params.delay, data->params.delay_fudge));
+ sleep_time = mksleep_time(data->params.delay, data->params.delay_fudge);
+ ts.tv_sec = sleep_time / 1000000000;
+ ts.tv_nsec = sleep_time % 1000000000;
+ nanosleep(&ts, NULL);
}
DLT_UNREGISTER_CONTEXT(mycontext);
diff --git a/src/tests/dlt-test-stress-user.c b/src/tests/dlt-test-stress-user.c
index 5cd3a65..5b7047b 100644
--- a/src/tests/dlt-test-stress-user.c
+++ b/src/tests/dlt-test-stress-user.c
@@ -232,6 +232,7 @@ int testall(int count, int repeat, int delay, int size)
{
char buffer[size];
int num, rnum;
+ struct timespec ts;
for (num = 0; num < size; num++)
buffer[num] = num;
@@ -243,7 +244,9 @@ int testall(int count, int repeat, int delay, int size)
for (rnum = 0; rnum < repeat; rnum++)
for (num = 1; num <= count; num++) {
DLT_LOG(context_info, DLT_LOG_INFO, DLT_INT(num), DLT_RAW(buffer, size));
- usleep(delay);
+ ts.tv_sec = (delay * 1000) / 1000000000;
+ ts.tv_nsec = (delay * 1000) % 1000000000;
+ nanosleep(&ts, NULL);
}
/* wait 5 seconds after test */
diff --git a/src/tests/dlt-test-stress.c b/src/tests/dlt-test-stress.c
index ddfe937..bb986da 100644
--- a/src/tests/dlt-test-stress.c
+++ b/src/tests/dlt-test-stress.c
@@ -227,6 +227,7 @@ void stress1(void)
{
int i, c;
char ctid[5];
+ struct timespec ts;
printf("Starting stress test1... (press \"Enter\" to terminate test) \n");
@@ -240,7 +241,9 @@ void stress1(void)
/*printf("%i: '%s' \n",i,ctid); */
dlt_register_context(&(mycontext[i]), ctid, ctid);
- usleep(500);
+ ts.tv_sec = 0;
+ ts.tv_nsec = 500 * 1000;
+ nanosleep(&ts, NULL);
}
while (1) {
@@ -255,7 +258,9 @@ void stress1(void)
for (i = 0; i < STRESS1_NUM_CONTEXTS; i++) {
DLT_UNREGISTER_CONTEXT(mycontext[i]);
- usleep(500);
+ ts.tv_sec = 0;
+ ts.tv_nsec = 500 * 1000;
+ nanosleep(&ts, NULL);
}
printf("Finished stress test1 \n\n");
@@ -264,6 +269,7 @@ void stress1(void)
void stress2(void)
{
int ret, index;
+ struct timespec ts;
pthread_t thread[STRESS2_MAX_NUM_THREADS];
thread_data_t thread_data[STRESS2_MAX_NUM_THREADS];
@@ -282,7 +288,9 @@ void stress2(void)
if (ret != 0)
printf("Error creating thread %d: %s \n", index, strerror(errno));
- usleep(1000);
+ ts.tv_sec = 0;
+ ts.tv_nsec = 1000 * 1000;
+ nanosleep(&ts, NULL);
}
for (index = 0; index < STRESS2_MAX_NUM_THREADS; index++)
@@ -296,6 +304,7 @@ void thread_function(void)
/*thread_data_t *data; */
DLT_DECLARE_CONTEXT(context_thread1);
char ctid[5];
+ struct timespec ts;
/*data = (thread_data_t *) ptr; */
@@ -304,7 +313,9 @@ void thread_function(void)
/* Create random context id */
snprintf(ctid, 5, "%.2x", rand() & 0x0000ffff);
- usleep(rand() / 1000);
+ ts.tv_sec = 0;
+ ts.tv_nsec = rand();
+ nanosleep(&ts, NULL);
DLT_REGISTER_CONTEXT(context_thread1, ctid, ctid);
@@ -318,6 +329,7 @@ void stress3(void)
DLT_DECLARE_CONTEXT(context_stress3);
char buffer[STRESS3_MAX_NUM_MESSAGES];
int num;
+ struct timespec ts;
/* Performance test */
DLT_REGISTER_CONTEXT(context_stress3, "TST3", "Stress Test 3 - Performance");
@@ -328,7 +340,9 @@ void stress3(void)
for (num = 0; num < STRESS3_MAX_NUM_MESSAGES; num++) {
buffer[num] = num;
DLT_LOG(context_stress3, DLT_LOG_INFO, DLT_INT(num), DLT_RAW(buffer, num));
- usleep(10000);
+ ts.tv_sec = 0;
+ ts.tv_nsec = 10000 * 1000;
+ nanosleep(&ts, NULL);
}
printf("Finished stress test3 \n\n");