diff --git a/src/core/ddsc/src/dds_instance.c b/src/core/ddsc/src/dds_instance.c index 903d7ee..7b8b93e 100644 --- a/src/core/ddsc/src/dds_instance.c +++ b/src/core/ddsc/src/dds_instance.c @@ -241,12 +241,11 @@ dds_unregister_instance_ih_ts( if (wr->m_entity.m_qos) { dds_qget_writer_data_lifecycle (wr->m_entity.m_qos, &autodispose); } + thread_state_awake (ts1); if (autodispose) { dds_instance_remove (wr->m_topic, NULL, handle); action |= DDS_WR_DISPOSE_BIT; } - - thread_state_awake (ts1); tk = ddsi_tkmap_find_by_id (gv.m_tkmap, handle); if (tk) { struct ddsi_sertopic *tp = wr->m_topic->m_stopic; diff --git a/src/core/ddsc/tests/unregister.c b/src/core/ddsc/tests/unregister.c index e27eb32..b7b03d5 100644 --- a/src/core/ddsc/tests/unregister.c +++ b/src/core/ddsc/tests/unregister.c @@ -609,6 +609,37 @@ CU_Test(ddsc_unregister_instance_ih_ts, unregistering_past_sample, .init=unregis } /*************************************************************************************************/ +/*************************************************************************************************/ +CU_Test(ddsc_unregister_instance_ih_ts, unregistering_instance) +{ + Space_Type1 testData = { 0, 22, 22 }; + dds_instance_handle_t ih = 0; + dds_return_t ret; + char name[100]; + + /* Create a writer that WILL automatically dispose unregistered samples. */ + g_participant = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL); + CU_ASSERT_FATAL(g_participant > 0); + g_topic = dds_create_topic(g_participant, &Space_Type1_desc, create_topic_name("ddsc_unregistering_instance_test", name, 100), NULL, NULL); + CU_ASSERT_FATAL(g_topic > 0); + g_writer = dds_create_writer(g_participant, g_topic, NULL, NULL); + CU_ASSERT_FATAL(g_writer > 0); + + /* Register the instance. */ + ret = dds_register_instance(g_writer, &ih, &testData); + CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK); + CU_ASSERT_NOT_EQUAL_FATAL(ih, DDS_HANDLE_NIL); + + /* Unregister the instance. */ + ret = dds_unregister_instance_ih_ts(g_writer, ih, dds_time()); + CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK); + + dds_delete(g_writer); + dds_delete(g_topic); + dds_delete(g_participant); +} +/*************************************************************************************************/ + /*************************************************************************************************/ CU_Test(ddsc_unregister_instance, dispose_unregistered_sample, .init=unregistering_init, .fini=unregistering_fini) {