fix sequencing of internal liveliness monitoring and rtps init/term
liveliness monitoring requires rtps stack initialised if initially deaf, so starting the monitoring thread must happen after rtps_init Signed-off-by: Erik Boasson <eb@ilities.com>
This commit is contained in:
parent
9cab5e769c
commit
259e4676dc
4 changed files with 23 additions and 11 deletions
|
@ -131,11 +131,6 @@ dds_init(dds_domainid_t domain)
|
||||||
ret = DDS_ERRNO(DDS_RETCODE_OUT_OF_RESOURCES, "Failed to create a servicelease.");
|
ret = DDS_ERRNO(DDS_RETCODE_OUT_OF_RESOURCES, "Failed to create a servicelease.");
|
||||||
goto fail_servicelease_new;
|
goto fail_servicelease_new;
|
||||||
}
|
}
|
||||||
if (nn_servicelease_start_renewing(gv.servicelease) < 0)
|
|
||||||
{
|
|
||||||
ret = DDS_ERRNO(DDS_RETCODE_ERROR, "Failed to start the servicelease.");
|
|
||||||
goto fail_servicelease_start;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rtps_init() < 0)
|
if (rtps_init() < 0)
|
||||||
|
@ -143,6 +138,13 @@ dds_init(dds_domainid_t domain)
|
||||||
ret = DDS_ERRNO(DDS_RETCODE_ERROR, "Failed to initialize RTPS.");
|
ret = DDS_ERRNO(DDS_RETCODE_ERROR, "Failed to initialize RTPS.");
|
||||||
goto fail_rtps_init;
|
goto fail_rtps_init;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (gv.servicelease && nn_servicelease_start_renewing(gv.servicelease) < 0)
|
||||||
|
{
|
||||||
|
ret = DDS_ERRNO(DDS_RETCODE_ERROR, "Failed to start the servicelease.");
|
||||||
|
goto fail_servicelease_start;
|
||||||
|
}
|
||||||
|
|
||||||
upgrade_main_thread();
|
upgrade_main_thread();
|
||||||
|
|
||||||
/* Set additional default participant properties */
|
/* Set additional default participant properties */
|
||||||
|
@ -175,11 +177,16 @@ skip:
|
||||||
DDS_REPORT_FLUSH(false);
|
DDS_REPORT_FLUSH(false);
|
||||||
return DDS_RETCODE_OK;
|
return DDS_RETCODE_OK;
|
||||||
|
|
||||||
fail_rtps_init:
|
|
||||||
fail_servicelease_start:
|
fail_servicelease_start:
|
||||||
if (gv.servicelease)
|
if (gv.servicelease)
|
||||||
|
nn_servicelease_stop_renewing (gv.servicelease);
|
||||||
|
rtps_term ();
|
||||||
|
fail_rtps_init:
|
||||||
|
if (gv.servicelease)
|
||||||
|
{
|
||||||
nn_servicelease_free (gv.servicelease);
|
nn_servicelease_free (gv.servicelease);
|
||||||
gv.servicelease = NULL;
|
gv.servicelease = NULL;
|
||||||
|
}
|
||||||
fail_servicelease_new:
|
fail_servicelease_new:
|
||||||
thread_states_fini();
|
thread_states_fini();
|
||||||
fail_rtps_config:
|
fail_rtps_config:
|
||||||
|
@ -200,8 +207,6 @@ fail_handleserver:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
extern void dds_fini (void)
|
extern void dds_fini (void)
|
||||||
{
|
{
|
||||||
os_mutex *init_mutex;
|
os_mutex *init_mutex;
|
||||||
|
@ -213,6 +218,8 @@ extern void dds_fini (void)
|
||||||
{
|
{
|
||||||
dds__builtin_fini();
|
dds__builtin_fini();
|
||||||
|
|
||||||
|
if (gv.servicelease)
|
||||||
|
nn_servicelease_stop_renewing (gv.servicelease);
|
||||||
rtps_term ();
|
rtps_term ();
|
||||||
if (gv.servicelease)
|
if (gv.servicelease)
|
||||||
nn_servicelease_free (gv.servicelease);
|
nn_servicelease_free (gv.servicelease);
|
||||||
|
|
|
@ -20,6 +20,7 @@ struct nn_servicelease;
|
||||||
|
|
||||||
struct nn_servicelease *nn_servicelease_new (void (*renew_cb) (void *arg), void *renew_arg);
|
struct nn_servicelease *nn_servicelease_new (void (*renew_cb) (void *arg), void *renew_arg);
|
||||||
int nn_servicelease_start_renewing (struct nn_servicelease *sl);
|
int nn_servicelease_start_renewing (struct nn_servicelease *sl);
|
||||||
|
void nn_servicelease_stop_renewing (struct nn_servicelease *sl);
|
||||||
void nn_servicelease_free (struct nn_servicelease *sl);
|
void nn_servicelease_free (struct nn_servicelease *sl);
|
||||||
void nn_servicelease_statechange_barrier (struct nn_servicelease *sl);
|
void nn_servicelease_statechange_barrier (struct nn_servicelease *sl);
|
||||||
|
|
||||||
|
|
|
@ -478,7 +478,7 @@ static bool serdata_default_topicless_to_sample_cdr (const struct ddsi_sertopic
|
||||||
|
|
||||||
static bool serdata_default_topicless_to_sample_cdr_nokey (const struct ddsi_sertopic *topic, const struct ddsi_serdata *serdata_common, void *sample, void **bufptr, void *buflim)
|
static bool serdata_default_topicless_to_sample_cdr_nokey (const struct ddsi_sertopic *topic, const struct ddsi_serdata *serdata_common, void *sample, void **bufptr, void *buflim)
|
||||||
{
|
{
|
||||||
(void)topic; (void)sample; (void)bufptr; (void)buflim;
|
(void)topic; (void)sample; (void)bufptr; (void)buflim; (void)serdata_common;
|
||||||
assert (serdata_common->topic == NULL);
|
assert (serdata_common->topic == NULL);
|
||||||
assert (serdata_common->kind == SDK_KEY);
|
assert (serdata_common->kind == SDK_KEY);
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -230,7 +230,7 @@ void nn_servicelease_statechange_barrier (struct nn_servicelease *sl)
|
||||||
os_mutexUnlock (&sl->lock);
|
os_mutexUnlock (&sl->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
void nn_servicelease_free (struct nn_servicelease *sl)
|
void nn_servicelease_stop_renewing (struct nn_servicelease *sl)
|
||||||
{
|
{
|
||||||
if (sl->keepgoing != -1)
|
if (sl->keepgoing != -1)
|
||||||
{
|
{
|
||||||
|
@ -240,6 +240,10 @@ void nn_servicelease_free (struct nn_servicelease *sl)
|
||||||
os_mutexUnlock (&sl->lock);
|
os_mutexUnlock (&sl->lock);
|
||||||
join_thread (sl->ts);
|
join_thread (sl->ts);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void nn_servicelease_free (struct nn_servicelease *sl)
|
||||||
|
{
|
||||||
os_condDestroy (&sl->cond);
|
os_condDestroy (&sl->cond);
|
||||||
os_mutexDestroy (&sl->lock);
|
os_mutexDestroy (&sl->lock);
|
||||||
os_free (sl->av_ary);
|
os_free (sl->av_ary);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue