No extra transmit socket in MSM_NO_UNICAST mode
Reuse unicast data socket in MSM_NO_UNICAST, just like it did in all
modes before the extra socket was introduced in
d1ed8df9f3. This restores support for the
"raw ethernet" transport on Linux by no longer requiring the transport
to create a socket with an arbitrary "port".
Signed-off-by: Erik Boasson <eb@ilities.com>
This commit is contained in:
parent
f33867e884
commit
bffe386f2d
1 changed files with 22 additions and 21 deletions
|
|
@ -1010,6 +1010,22 @@ void ddsi_set_deafmute (struct ddsi_domaingv *gv, bool deaf, bool mute, int64_t
|
|||
GVLOGDISC ("\n");
|
||||
}
|
||||
|
||||
static void free_conns (struct ddsi_domaingv *gv)
|
||||
{
|
||||
// Depending on settings, various "conn"s can alias others, this makes sure we free each one only once
|
||||
// FIXME: perhaps store them in a table instead?
|
||||
ddsi_tran_conn_t cs[] = { gv->xmit_conn, gv->disc_conn_mc, gv->data_conn_mc, gv->disc_conn_uc, gv->data_conn_uc };
|
||||
for (size_t i = 0; i < sizeof (cs) / sizeof (cs[0]); i++)
|
||||
{
|
||||
if (cs[i] == NULL)
|
||||
continue;
|
||||
for (size_t j = i + 1; j < sizeof (cs) / sizeof (cs[0]); j++)
|
||||
if (cs[i] == cs[j])
|
||||
cs[j] = NULL;
|
||||
ddsi_conn_free (cs[i]);
|
||||
}
|
||||
}
|
||||
|
||||
int rtps_init (struct ddsi_domaingv *gv)
|
||||
{
|
||||
uint32_t port_disc_uc = 0;
|
||||
|
|
@ -1390,7 +1406,10 @@ int rtps_init (struct ddsi_domaingv *gv)
|
|||
}
|
||||
}
|
||||
|
||||
/* Create shared transmit connection */
|
||||
/* Create shared transmit connection -- FIXME: no longer needed, but can't do the testing right now */
|
||||
if (gv->config.many_sockets_mode == MSM_NO_UNICAST)
|
||||
gv->xmit_conn = gv->data_conn_uc;
|
||||
else
|
||||
{
|
||||
const ddsi_tran_qos_t qos = { .m_purpose = DDSI_TRAN_QOS_XMIT, .m_diffserv = 0 };
|
||||
dds_return_t rc;
|
||||
|
|
@ -1534,18 +1553,9 @@ err_post_omg_security_init:
|
|||
#endif
|
||||
#endif
|
||||
err_mc_conn:
|
||||
if (gv->xmit_conn)
|
||||
ddsi_conn_free (gv->xmit_conn);
|
||||
if (gv->disc_conn_mc)
|
||||
ddsi_conn_free (gv->disc_conn_mc);
|
||||
if (gv->data_conn_mc && gv->data_conn_mc != gv->disc_conn_mc)
|
||||
ddsi_conn_free (gv->data_conn_mc);
|
||||
free_conns (gv);
|
||||
if (gv->pcap_fp)
|
||||
ddsrt_mutex_destroy (&gv->pcap_lock);
|
||||
if (gv->disc_conn_uc != gv->disc_conn_mc)
|
||||
ddsi_conn_free (gv->disc_conn_uc);
|
||||
if (gv->data_conn_uc != gv->disc_conn_uc)
|
||||
ddsi_conn_free (gv->data_conn_uc);
|
||||
free_group_membership (gv->mship);
|
||||
err_unicast_sockets:
|
||||
ddsi_tkmap_free (gv->m_tkmap);
|
||||
|
|
@ -1876,16 +1886,7 @@ void rtps_fini (struct ddsi_domaingv *gv)
|
|||
ddsrt_thread_pool_free (gv->thread_pool);
|
||||
|
||||
(void) joinleave_spdp_defmcip (gv, 0);
|
||||
|
||||
ddsi_conn_free (gv->xmit_conn);
|
||||
ddsi_conn_free (gv->disc_conn_mc);
|
||||
if (gv->data_conn_mc != gv->disc_conn_mc)
|
||||
ddsi_conn_free (gv->data_conn_mc);
|
||||
if (gv->disc_conn_uc != gv->disc_conn_mc)
|
||||
ddsi_conn_free (gv->disc_conn_uc);
|
||||
if (gv->data_conn_uc != gv->disc_conn_uc)
|
||||
ddsi_conn_free (gv->data_conn_uc);
|
||||
|
||||
free_conns (gv);
|
||||
free_group_membership(gv->mship);
|
||||
ddsi_tran_factories_fini (gv);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue