Пример #1
0
        internal virtual void ReleasePublication(Publication publication)
        {
            VerifyActive();

            if (publication == _activePublications.Remove(publication.Channel, publication.StreamId))
            {
                LingerResource(publication.ManagedResource());
                AwaitResponse(_driverProxy.RemovePublication(publication.RegistrationId), null);
            }
        }
Пример #2
0
        internal virtual void ReleasePublication(Publication publication)
        {
            if (_isClosed)
            {
                throw new InvalidOperationException("Aeron client is closed");
            }

            if (publication == _activePublications.Remove(publication.Channel, publication.StreamId))
            {
                LingerResource(publication.ManagedResource());
                AwaitResponse(_driverProxy.RemovePublication(publication.RegistrationId), null);
            }
        }
Пример #3
0
        internal virtual void ReleasePublication(Publication publication)
        {
            _clientLock.Lock();
            try
            {
                if (!publication.IsClosed)
                {
                    publication.InternalClose();

                    EnsureOpen();

                    var removedPublication = _resourceByRegIdMap[publication.RegistrationId];

                    if (_resourceByRegIdMap.Remove(publication.RegistrationId) && publication == removedPublication)
                    {
                        ReleaseLogBuffers(publication.LogBuffers(), publication.OriginalRegistrationId());
                        AwaitResponse(_driverProxy.RemovePublication(publication.RegistrationId));
                    }
                }
            }
            finally
            {
                _clientLock.Unlock();
            }
        }
Пример #4
0
        internal void ReleasePublication(Publication publication)
        {
            _clientLock.Lock();
            try
            {
                if (_isTerminating || _isClosed)
                {
                    return;
                }

                if (!publication.IsClosed)
                {
                    EnsureNotReentrant();

                    publication.InternalClose();

                    var removedPublication = _resourceByRegIdMap[publication.RegistrationId];

                    if (_resourceByRegIdMap.Remove(publication.RegistrationId) && publication == removedPublication)
                    {
                        ReleaseLogBuffers(publication.LogBuffers, publication.OriginalRegistrationId);
                        _asyncCommandIdSet.Add(_driverProxy.RemovePublication(publication.RegistrationId));
                    }
                }
            }
            finally
            {
                _clientLock.Unlock();
            }
        }
Пример #5
0
        internal void ReleasePublication(Publication publication)
#endif
        {
            lock (this)
            {
                VerifyDriverIsActive();

                if (publication == _activePublications.Remove(publication.Channel, publication.StreamId))
                {
                    var correlationId = _driverProxy.RemovePublication(publication.RegistrationId);

                    LingerResource(publication.ManagedResource());
                    AwaitResponse(correlationId, publication.Channel, false);
                }
            }
        }
Пример #6
0
        internal virtual void ReleasePublication(Publication publication)
        {
            lock (this)
            {
                VerifyDriverIsActive();

                if (publication == _activePublications.Remove(publication.Channel, publication.StreamId))
                {
                    var correlationId = _driverProxy.RemovePublication(publication.RegistrationId);

                    var timeout = _nanoClock.NanoTime() + _driverTimeoutNs;

                    LingerResource(publication.ManagedResource());
                    DoWorkUntil(correlationId, timeout, publication.Channel);
                }
            }
        }