From 8ce389dd8540bdf8ed5cac3b1faa7033aabc826c Mon Sep 17 00:00:00 2001 From: Erik Boasson Date: Mon, 7 Oct 2019 16:40:21 +0200 Subject: [PATCH] IID generator: init and atomic64 ops (#270) Signed-off-by: Erik Boasson --- src/core/ddsi/include/dds/ddsi/ddsi_iid.h | 5 ---- src/core/ddsi/src/ddsi_iid.c | 34 +++++------------------ 2 files changed, 7 insertions(+), 32 deletions(-) diff --git a/src/core/ddsi/include/dds/ddsi/ddsi_iid.h b/src/core/ddsi/include/dds/ddsi/ddsi_iid.h index 65ecf90..904b01e 100644 --- a/src/core/ddsi/include/dds/ddsi/ddsi_iid.h +++ b/src/core/ddsi/include/dds/ddsi/ddsi_iid.h @@ -21,12 +21,7 @@ extern "C" { #endif struct ddsi_iid { -#if DDSRT_ATOMIC64_SUPPORT ddsrt_atomic_uint64_t counter; -#else - ddsrt_mutex_t lock; - uint64_t counter; -#endif uint32_t key[4]; }; diff --git a/src/core/ddsi/src/ddsi_iid.c b/src/core/ddsi/src/ddsi_iid.c index 3b9f023..ba5bdbf 100644 --- a/src/core/ddsi/src/ddsi_iid.c +++ b/src/core/ddsi/src/ddsi_iid.c @@ -15,7 +15,7 @@ #include "dds/ddsrt/sync.h" #include "dds/ddsi/ddsi_iid.h" -static struct ddsi_iid dds_iid; +static struct ddsi_iid ddsi_iid; static void dds_tea_encrypt (uint32_t v[2], const uint32_t k[4]) { @@ -48,16 +48,8 @@ uint64_t ddsi_iid_gen (void) { uint64_t iid; union { uint64_t u64; uint32_t u32[2]; } tmp; - -#if DDSRT_ATOMIC64_SUPPORT - tmp.u64 = ddsrt_atomic_inc64_nv (&dds_iid.counter); -#else - ddsrt_mutex_lock (&dds_iid.lock); - tmp.u64 = ++dds_iid.counter; - ddsrt_mutex_unlock (&dds_iid.lock); -#endif - - dds_tea_encrypt (tmp.u32, dds_iid.key); + tmp.u64 = ddsrt_atomic_inc64_nv (&ddsi_iid.counter); + dds_tea_encrypt (tmp.u32, ddsi_iid.key); iid = tmp.u64; return iid; } @@ -65,26 +57,14 @@ uint64_t ddsi_iid_gen (void) void ddsi_iid_init (void) { union { uint64_t u64; uint32_t u32[2]; } tmp; - -#if ! DDSRT_ATOMIC64_SUPPORT - ddsrt_mutex_init (&dds_iid.lock); -#endif - - for (size_t i = 0; i < sizeof (dds_iid.key) / sizeof (dds_iid.key[0]); i++) - dds_iid.key[0] = ddsrt_random (); + for (size_t i = 0; i < sizeof (ddsi_iid.key) / sizeof (ddsi_iid.key[0]); i++) + ddsi_iid.key[i] = ddsrt_random (); tmp.u64 = 0; - dds_tea_decrypt (tmp.u32, dds_iid.key); -#if DDSRT_ATOMIC64_SUPPORT - ddsrt_atomic_st64 (&dds_iid.counter, tmp.u64); -#else - dds_iid.counter = tmp.u64; -#endif + dds_tea_decrypt (tmp.u32, ddsi_iid.key); + ddsrt_atomic_st64 (&ddsi_iid.counter, tmp.u64); } void ddsi_iid_fini (void) { -#if ! DDSRT_ATOMIC64_SUPPORT - ddsrt_mutex_destroy (&dds_iid.lock); -#endif }