gapi_returnCode_t _PublisherFree ( _Publisher _this) { gapi_returnCode_t result = GAPI_RETCODE_OK; _Status status; u_publisher p; assert(_this); status = _EntityStatus(_this); _StatusSetListener(status, NULL, 0); _EntityClaim(status); _StatusDeinit(status); gapi_dataWriterQos_free(&_this->_defDataWriterQos); p = U_PUBLISHER_GET(_this); _EntityDispose (_Entity(_this)); if (u_publisherFree(p) != U_RESULT_OK) { result = GAPI_RETCODE_ERROR; } return result; }
void d_publisherDeinit( d_object object) { d_publisher publisher; d_durability durability; assert(d_objectIsValid(object, D_PUBLISHER) == TRUE); if(object){ publisher = d_publisher(object); durability = d_adminGetDurability(publisher->admin); if(publisher->statusWriter){ d_printTimedEvent(durability, D_LEVEL_FINEST, D_THREAD_MAIN, "destroying status writer\n"); u_writerFree(publisher->statusWriter); d_printTimedEvent(durability, D_LEVEL_FINEST, D_THREAD_MAIN, "status writer destroyed\n"); publisher->statusWriter = NULL; } if(publisher->newGroupWriter){ d_printTimedEvent(durability, D_LEVEL_FINEST, D_THREAD_MAIN, "destroying newGroup writer\n"); u_writerFree(publisher->newGroupWriter); d_printTimedEvent(durability, D_LEVEL_FINEST, D_THREAD_MAIN, "newGroup writer destroyed\n"); publisher->newGroupWriter = NULL; } if(publisher->groupsRequestWriter){ d_printTimedEvent(durability, D_LEVEL_FINEST, D_THREAD_MAIN, "destroying groupsRequest writer\n"); u_writerFree(publisher->groupsRequestWriter); d_printTimedEvent(durability, D_LEVEL_FINEST, D_THREAD_MAIN, "groupsRequest writer destroyed\n"); publisher->groupsRequestWriter = NULL; } if(publisher->statusRequestWriter){ d_printTimedEvent(durability, D_LEVEL_FINEST, D_THREAD_MAIN, "destroying statusRequest writer\n"); u_writerFree(publisher->statusRequestWriter); d_printTimedEvent(durability, D_LEVEL_FINEST, D_THREAD_MAIN, "statusRequest writer destroyed\n"); publisher->statusRequestWriter = NULL; } if(publisher->sampleChainWriter){ d_printTimedEvent(durability, D_LEVEL_FINEST, D_THREAD_MAIN, "destroying sampleChain writer\n"); u_writerFree(publisher->sampleChainWriter); d_printTimedEvent(durability, D_LEVEL_FINEST, D_THREAD_MAIN, "sampleChain writer destroyed\n"); publisher->sampleChainWriter = NULL; } if(publisher->nameSpacesWriter){ d_printTimedEvent(durability, D_LEVEL_FINEST, D_THREAD_MAIN, "destroying nameSpaces writer\n"); u_writerFree(publisher->nameSpacesWriter); d_printTimedEvent(durability, D_LEVEL_FINEST, D_THREAD_MAIN, "nameSpaces writer destroyed\n"); publisher->nameSpacesWriter = NULL; } if(publisher->nameSpacesRequestWriter){ d_printTimedEvent(durability, D_LEVEL_FINEST, D_THREAD_MAIN, "destroying nameSpacesRequest writer\n"); u_writerFree(publisher->nameSpacesRequestWriter); d_printTimedEvent(durability, D_LEVEL_FINEST, D_THREAD_MAIN, "nameSpacesRequest writer destroyed\n"); publisher->nameSpacesRequestWriter = NULL; } if(publisher->deleteDataWriter){ d_printTimedEvent(durability, D_LEVEL_FINEST, D_THREAD_MAIN, "destroying deleteData writer\n"); u_writerFree(publisher->deleteDataWriter); d_printTimedEvent(durability, D_LEVEL_FINEST, D_THREAD_MAIN, "deleteData writer destroyed\n"); publisher->deleteDataWriter = NULL; } if(publisher->sampleRequestWriter){ d_printTimedEvent(durability, D_LEVEL_FINEST, D_THREAD_MAIN, "destroying sampleRequest writer\n"); u_writerFree(publisher->sampleRequestWriter); d_printTimedEvent(durability, D_LEVEL_FINEST, D_THREAD_MAIN, "sampleRequest writer destroyed\n"); publisher->sampleRequestWriter = NULL; } if(publisher->publisher){ d_printTimedEvent(durability, D_LEVEL_FINEST, D_THREAD_MAIN, "destroying user publisher\n"); u_publisherFree(publisher->publisher); d_printTimedEvent(durability, D_LEVEL_FINEST, D_THREAD_MAIN, "user publisher destroyed\n"); publisher->publisher = NULL; } } }
_Publisher _PublisherNew ( u_participant uParticipant, const gapi_publisherQos *qos, const struct gapi_publisherListener *a_listener, const gapi_statusMask mask, const _DomainParticipant participant) { v_publisherQos publisherQos; _Publisher newPublisher; assert(uParticipant); assert(qos); assert(participant); newPublisher = _PublisherAlloc(); if ( newPublisher ) { _EntityInit (_Entity(newPublisher), _Entity(participant)); gapi_dataWriterQosCopy (&gapi_dataWriterQosDefault, &newPublisher->_defDataWriterQos); if ( a_listener ) { newPublisher->_Listener = *a_listener; } } if ( newPublisher ) { publisherQos = u_publisherQosNew(NULL); if ( publisherQos ) { if ( !copyPublisherQosIn(qos, publisherQos)) { _EntityDispose(_Entity(newPublisher)); newPublisher = NULL; } } else { _EntityDispose(_Entity(newPublisher)); newPublisher = NULL; } } if ( newPublisher ) { u_publisher uPublisher; uPublisher = u_publisherNew (uParticipant, "publisher", publisherQos, FALSE); u_publisherQosFree(publisherQos); if ( uPublisher ) { U_PUBLISHER_SET(newPublisher, uPublisher); } else { _EntityDispose(_Entity(newPublisher)); newPublisher = NULL; } } if ( newPublisher ) { _Status status; status = _StatusNew(_Entity(newPublisher), STATUS_KIND_PUBLISHER, (struct gapi_listener *)a_listener, mask); if (status) { _EntityStatus(newPublisher) = status; if ( qos->partition.name._length == 0 ) { /* * behaviour of the kernel in case of an empty sequence * is that it is related to none of the partitions, * while DCPS expects it to be conected to all partitions. * Therefore this has to be done seperately. */ u_publisherPublish (U_PUBLISHER_GET(newPublisher), ""); } } else { u_publisherFree(U_PUBLISHER_GET(newPublisher)); _EntityDispose(_Entity(newPublisher)); newPublisher = NULL; } } return newPublisher; }