gapi_returnCode_t _SubscriberFree ( _Subscriber subscriber) { gapi_returnCode_t result = GAPI_RETCODE_OK; _Status status; u_subscriber s; assert(subscriber); status = _EntityStatus(subscriber); _StatusSetListener(status, NULL, 0); _EntityClaim(status); _StatusDeinit(status); gapi_dataReaderQos_free(&subscriber->_defDataReaderQos); s = U_SUBSCRIBER_GET(subscriber); _EntityDispose(_Entity(subscriber)); if (u_subscriberFree(s) != U_RESULT_OK) { result = GAPI_RETCODE_ERROR; } return result; }
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; }
_DataReader _DataReaderViewDataReader ( _DataReaderView dataReaderView) { _DataReader datareader; datareader = dataReaderView->datareader; _EntityClaim(datareader); return datareader; }
/* Entity * get_entity(); */ gapi_entity gapi_statusCondition_get_entity( gapi_statusCondition _this) { _StatusCondition statuscondition; _Entity entity = NULL; statuscondition = gapi_statusConditionClaim(_this, NULL); if ( statuscondition != NULL ) { entity = _ConditionEntity(_Condition(statuscondition)); _EntityClaim(entity); } _EntityRelease(statuscondition); return (gapi_entity)_EntityRelease(entity); }
/* Topic * get_topic(); */ gapi_topic gapi_dataWriter_get_topic ( gapi_dataWriter _this) { _DataWriter datawriter; _Topic topic = NULL; datawriter = gapi_dataWriterClaim(_this, NULL); if ( datawriter != NULL ) { topic = (_Topic)datawriter->topic; _EntityClaim(topic); } _EntityRelease(datawriter); return (gapi_topic)_EntityRelease(topic); }
void _BuiltinSubscriberFree ( _Subscriber subscriber) { _Status status; assert(subscriber != NULL); status = _EntityStatus(subscriber); _StatusSetListener(status, NULL, 0); _EntityClaim(status); _StatusDeinit(status); u_subscriberFree(U_SUBSCRIBER_GET(subscriber)); _EntityDispose(_Entity(subscriber)); }
gapi_returnCode_t _DataReaderFree ( _DataReader _this) { gapi_returnCode_t result = GAPI_RETCODE_OK; _Status status; u_dataReader r; assert(_this); /* The following refCount checking and destruction mechanism is not * bullet proof and may cause leakage. * This is a temporary situation during GAPI redesign and should be * resolved when the GAPI redesign is finished. */ r = U_DATAREADER_GET(_this); _TopicDescriptionDecUse(_this->topicDescription); status = _EntityStatus(_this); _StatusSetListener(status, NULL, 0); _EntityClaim(status); _StatusDeinit(status); gapi_loanRegistry_free(_this->loanRegistry); /* Following the user layer reader object is deleted after the entity * dispose because it will otherwise lead to a double free of the user * layer reader. * This is caused by the status condition which is attached to an exiting * waitset and the fact that a status condition's user object is the user * layer reader. * This is a hack but besides of that the destruction of the user entity * should be part of the entity dispose method. * For now this works. */ _EntityDispose(_Entity(_this)); u_dataReaderFree(r); return result; }
gapi_boolean _PublisherContainsEntity ( _Publisher _this, gapi_instanceHandle_t handle) { struct check_handle_arg arg; assert(_this); _EntityClaim(_this); arg.handle = handle; arg.result = FALSE; u_publisherWalkWriters(U_PUBLISHER_GET(_this), (u_writerAction)check_handle, (c_voidp)&arg); _EntityRelease(_this); return arg.result; }
gapi_boolean _SubscriberContainsEntity ( _Subscriber _this, gapi_instanceHandle_t handle) { struct check_handle_arg arg; assert(_this); _EntityClaim(_this); arg.handle = handle; arg.result = FALSE; u_subscriberWalkReaders(U_SUBSCRIBER_GET(_this), (u_readerAction)check_handle, (c_voidp)&arg); _EntityRelease(_this); return arg.result; }
gapi_returnCode_t _DataWriterFree ( _DataWriter _this) { gapi_returnCode_t result = GAPI_RETCODE_OK; _Status status; u_writer w; assert(_this); status = _EntityStatus(_this); _TopicDescriptionDecUse(_TopicDescription(_this->topic)); _StatusSetListener(status, NULL, 0); _EntityClaim(status); _StatusDeinit(status); w = U_WRITER_GET(_this); _EntityDispose (_Entity(_this)); u_writerFree(w); return result; }