diff --git a/proto/bfd/bfd.c b/proto/bfd/bfd.c index 63e0deff..479c1510 100644 --- a/proto/bfd/bfd.c +++ b/proto/bfd/bfd.c @@ -124,7 +124,7 @@ static struct { list proto_list; } bfd_global; -static struct bfd_session bfd_admin_down = { .loc = { .state = BFD_STATE_ADMIN_DOWN }, }; +static struct bfd_session bfd_admin_down = { .loc = ATOMIC_VAR_INIT((struct bfd_session_state) { .state = BFD_STATE_ADMIN_DOWN }), }; const char *bfd_state_names[] = { "AdminDown", "Down", "Init", "Up" }; diff --git a/proto/bfd/bfd.h b/proto/bfd/bfd.h index b3266857..ffb1c43f 100644 --- a/proto/bfd/bfd.h +++ b/proto/bfd/bfd.h @@ -128,7 +128,7 @@ struct bfd_session _Atomic struct bfd_session_state loc; struct bfd_session_state rem; -#define BFD_LOC_STATE(s) atomic_load_explicit(&(s)->loc, memory_order_relaxed) +#define BFD_LOC_STATE(s) ({ struct bfd_session_state _bss = atomic_load_explicit(&(s)->loc, memory_order_relaxed); _bss; }) u32 loc_id; /* Local session ID (local discriminator) */ u32 rem_id; /* Remote session ID (remote discriminator) */