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; }
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; }
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_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; }