static void remove_state_writer () { DDS_ReturnCode_t error; DDS_DataWriter_set_listener (dw, NULL, 0); if ((error = DDS_Publisher_delete_datawriter (pub, dw))) fatal ("DDS_Publisher_delete_datawriter() failed (%s)!", DDS_error (error)); if ((error = DDS_Publisher_delete_contained_entities (pub))) fatal ("DDS_Publisher_delete_contained_entities () failed (%s)!", DDS_error (error)); }
int dds_datawriter_set_listener( dds_entity_t e, const dds_writerlistener_t *listener) { DDS_ReturnCode_t result = DDS_RETCODE_ERROR; struct DataWriterInfo *info = NULL; struct DDS_DataWriterListener dpl = {NULL, NULL, NULL, NULL, NULL}; dds_writerlistener_t *newListener = NULL; dds_writerlistener_t *oldListener = NULL; DDS_StatusMask mask = 0; DDS_REPORT_STACK(); result = DDS_Entity_claim_user_data(e, (DDS_EntityUserData *)&info); if (result == DDS_RETCODE_OK) { oldListener = info->listener; if (listener) { newListener = os_malloc(sizeof(dds_writerlistener_t)); *newListener = *listener; mask = dds_status_get_enabled(e); info->listener = newListener; dds_datawriter_listener_init(&dpl, info); } else { mask = 0; info->listener = NULL; } result = DDS_DataWriter_set_listener(e, &dpl, mask); DDS_Entity_release_user_data((DDS_EntityUserData)info); os_free(oldListener); } DDS_REPORT_FLUSH(e, result != DDS_RETCODE_OK); return DDS_ERRNO(result, DDS_MOD_WRITER, DDS_ERR_Mx); }