aeron-driver/src/main/java/io/aeron/driver/PublicationImage.java
public void onTimeEvent(final long timeNs, final long timesMs, final DriverConductor conductor)
    {
        switch (state)
        {
            case ACTIVE:
                checkUntetheredSubscriptions(timeNs, conductor);
                break;

            case INACTIVE:
                if (isDrained())
                {
                    state = State.LINGER;
                    timeOfLastStateChangeNs = timeNs;
                    conductor.transitionToLinger(this);
                }
                isTrackingRebuild = false;
                break;

            case LINGER:
                if ((timeOfLastStateChangeNs + imageLivenessTimeoutNs) - timeNs < 0)
                {
                    state = State.DONE;
                    conductor.cleanupImage(this);
                }
                break;
        }
    }
public void onTimeEvent(final long timeNs, final long timesMs, final DriverConductor conductor)
    {
        switch (state)
        {
            case ACTIVE:
                checkUntetheredSubscriptions(timeNs, conductor);
                break;

            case INACTIVE:
                if (isDrained())
                {
                    state = State.LINGER;
                    timeOfLastStateChangeNs = timeNs;
                    conductor.transitionToLinger(this);
                }
                isTrackingRebuild = false;
                break;

            case LINGER:
                if ((timeOfLastStateChangeNs + imageLivenessTimeoutNs) - timeNs < 0)
                {
                    state = State.DONE;
                    conductor.cleanupImage(this);
                }
                break;
        }
    }
{@inheritDoc}