Check that topic is from the same participant
Things go really badly wrong when topics from one participant are used to create a reader/writer in another participant. This returns an error if they are not. Signed-off-by: Erik Boasson <eb@ilities.com>
This commit is contained in:
parent
7feab2e982
commit
f3d0438781
4 changed files with 33 additions and 4 deletions
|
@ -347,8 +347,11 @@ dds_entity_t dds_create_reader (dds_entity_t participant_or_subscriber, dds_enti
|
||||||
goto err_tp_lock;
|
goto err_tp_lock;
|
||||||
}
|
}
|
||||||
assert (tp->m_stopic);
|
assert (tp->m_stopic);
|
||||||
/* FIXME: domain check */
|
if (sub->m_entity.m_participant != tp->m_entity.m_participant)
|
||||||
assert (sub->m_entity.m_domain == tp->m_entity.m_domain);
|
{
|
||||||
|
reader = DDS_RETCODE_BAD_PARAMETER;
|
||||||
|
goto err_pp_mismatch;
|
||||||
|
}
|
||||||
|
|
||||||
/* Merge qos from topic and subscriber, dds_copy_qos only fails when it is passed a null
|
/* Merge qos from topic and subscriber, dds_copy_qos only fails when it is passed a null
|
||||||
argument, but that isn't the case here */
|
argument, but that isn't the case here */
|
||||||
|
@ -414,6 +417,7 @@ dds_entity_t dds_create_reader (dds_entity_t participant_or_subscriber, dds_enti
|
||||||
return reader;
|
return reader;
|
||||||
|
|
||||||
err_bad_qos:
|
err_bad_qos:
|
||||||
|
err_pp_mismatch:
|
||||||
dds_topic_unlock (tp);
|
dds_topic_unlock (tp);
|
||||||
err_tp_lock:
|
err_tp_lock:
|
||||||
dds_subscriber_unlock (sub);
|
dds_subscriber_unlock (sub);
|
||||||
|
|
|
@ -274,9 +274,13 @@ dds_entity_t dds_create_writer (dds_entity_t participant_or_publisher, dds_entit
|
||||||
|
|
||||||
if ((rc = dds_topic_lock (topic, &tp)) != DDS_RETCODE_OK)
|
if ((rc = dds_topic_lock (topic, &tp)) != DDS_RETCODE_OK)
|
||||||
goto err_tp_lock;
|
goto err_tp_lock;
|
||||||
|
|
||||||
assert (tp->m_stopic);
|
assert (tp->m_stopic);
|
||||||
assert (pub->m_entity.m_domain == tp->m_entity.m_domain);
|
|
||||||
|
if (pub->m_entity.m_participant != tp->m_entity.m_participant)
|
||||||
|
{
|
||||||
|
rc = DDS_RETCODE_BAD_PARAMETER;
|
||||||
|
goto err_pp_mismatch;
|
||||||
|
}
|
||||||
|
|
||||||
/* Merge Topic & Publisher qos */
|
/* Merge Topic & Publisher qos */
|
||||||
wqos = dds_create_qos ();
|
wqos = dds_create_qos ();
|
||||||
|
@ -326,6 +330,7 @@ dds_entity_t dds_create_writer (dds_entity_t participant_or_publisher, dds_entit
|
||||||
return writer;
|
return writer;
|
||||||
|
|
||||||
err_bad_qos:
|
err_bad_qos:
|
||||||
|
err_pp_mismatch:
|
||||||
dds_topic_unlock (tp);
|
dds_topic_unlock (tp);
|
||||||
err_tp_lock:
|
err_tp_lock:
|
||||||
dds_publisher_unlock (pub);
|
dds_publisher_unlock (pub);
|
||||||
|
|
|
@ -277,6 +277,17 @@ CU_Theory((dds_entity_t *par, dds_entity_t *top), ddsc_reader_create, non_partic
|
||||||
}
|
}
|
||||||
/*************************************************************************************************/
|
/*************************************************************************************************/
|
||||||
|
|
||||||
|
/*************************************************************************************************/
|
||||||
|
CU_Test(ddsc_reader_create, wrong_participant, .init=reader_init, .fini=reader_fini)
|
||||||
|
{
|
||||||
|
dds_entity_t participant2 = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
|
||||||
|
CU_ASSERT_FATAL(participant2 > 0);
|
||||||
|
dds_entity_t reader = dds_create_reader(participant2, g_topic, NULL, NULL);
|
||||||
|
CU_ASSERT_EQUAL_FATAL(reader, DDS_RETCODE_BAD_PARAMETER);
|
||||||
|
dds_delete(participant2);
|
||||||
|
}
|
||||||
|
/*************************************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -72,6 +72,15 @@ CU_Test(ddsc_create_writer, participant, .init = setup, .fini = teardown)
|
||||||
CU_ASSERT_FATAL(writer > 0);
|
CU_ASSERT_FATAL(writer > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CU_Test(ddsc_create_writer, wrong_participant, .init = setup, .fini = teardown)
|
||||||
|
{
|
||||||
|
dds_entity_t participant2 = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
|
||||||
|
CU_ASSERT_FATAL(participant2 > 0);
|
||||||
|
writer = dds_create_writer(participant2, topic, NULL, NULL);
|
||||||
|
CU_ASSERT_EQUAL_FATAL(writer, DDS_RETCODE_BAD_PARAMETER);
|
||||||
|
dds_delete(participant2);
|
||||||
|
}
|
||||||
|
|
||||||
CU_Test(ddsc_create_writer, publisher, .init = setup, .fini = teardown)
|
CU_Test(ddsc_create_writer, publisher, .init = setup, .fini = teardown)
|
||||||
{
|
{
|
||||||
writer = dds_create_writer(publisher, topic, NULL, NULL);
|
writer = dds_create_writer(publisher, topic, NULL, NULL);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue