Example #1
0
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;
}
Example #2
0
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;
        }
    }
}
Example #3
0
_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;
}