From be327f5e56ac597438f37c0b1cbf2ca48d8c6116 Mon Sep 17 00:00:00 2001 From: Erik Boasson Date: Thu, 16 Jan 2020 16:30:24 +0100 Subject: [PATCH] Fix race between DCPSParticipant write and lease expiry Signed-off-by: Erik Boasson --- src/core/ddsi/src/q_entity.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/core/ddsi/src/q_entity.c b/src/core/ddsi/src/q_entity.c index abc9976..5f91343 100644 --- a/src/core/ddsi/src/q_entity.c +++ b/src/core/ddsi/src/q_entity.c @@ -3845,13 +3845,15 @@ void new_proxy_participant (struct q_globals *gv, const struct ddsi_guid *ppguid nn_plist_fini (&plist_rd); } + /* write DCPSParticipant topic before the lease can expire */ + builtintopic_write (gv->builtin_topic_interface, &proxypp->e, timestamp, true); + /* Register lease for auto liveliness, but be careful not to accidentally re-register DDSI2's lease, as we may have become dependent on DDSI2 any time after entidx_insert_proxy_participant_guid even if privileged_pp_guid was NULL originally */ ddsrt_mutex_lock (&proxypp->e.lock); if (proxypp->owns_lease) lease_register (ddsrt_atomic_ldvoidp (&proxypp->minl_auto)); - builtintopic_write (gv->builtin_topic_interface, &proxypp->e, timestamp, true); ddsrt_mutex_unlock (&proxypp->e.lock); }