aboutsummaryrefslogtreecommitdiff
path: root/example/time/time_global_test.c
diff options
context:
space:
mode:
authorPetri Savolainen <petri.savolainen@nokia.com>2019-06-06 10:32:23 +0300
committerPetri Savolainen <petri.savolainen@nokia.com>2019-06-12 12:31:32 +0300
commite4ef7a3b32d375e3e1872a43697d407413ae87aa (patch)
tree4653314ae35b95297c8175cd833f157894add4a5 /example/time/time_global_test.c
parent762e4c51fc0d61bee8e740370fa6c64f86a5ee6c (diff)
example: time: fix deadlock with single worker
Random id calculation did get stuck when there's only single worker (as id is always one). Signed-off-by: Petri Savolainen <petri.savolainen@nokia.com> Reviewed-by: Matias Elo <matias.elo@nokia.com>
Diffstat (limited to 'example/time/time_global_test.c')
-rw-r--r--example/time/time_global_test.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/example/time/time_global_test.c b/example/time/time_global_test.c
index efcd22984..1e5cb0bd4 100644
--- a/example/time/time_global_test.c
+++ b/example/time/time_global_test.c
@@ -84,20 +84,23 @@ static void print_log(test_globals_t *gbls)
printf("Number of errors: %u\n", err_num);
}
-static void
-generate_next_queue(test_globals_t *gbls, odp_queue_t *queue, unsigned int id)
+static void generate_next_queue(test_globals_t *gbls, odp_queue_t *queue,
+ unsigned int id)
{
int thr;
- unsigned int rand_id;
+ uint8_t rand_u8;
char queue_name[sizeof(QUEUE_NAME_PREFIX) + 2];
+ unsigned int rand_id = 1;
thr = odp_thread_id();
/* generate next random id */
- do {
- odp_random_data((uint8_t *)&rand_id, sizeof(rand_id), 1);
- rand_id = rand_id % gbls->thread_num + 1;
- } while (rand_id == id);
+ if (gbls->thread_num > 1) {
+ do {
+ odp_random_data(&rand_u8, 1, ODP_RANDOM_BASIC);
+ rand_id = rand_u8 % gbls->thread_num + 1;
+ } while (rand_id == id);
+ }
sprintf(queue_name, QUEUE_NAME_PREFIX "%d", rand_id);
*queue = odp_queue_lookup(queue_name);