20
20
import io .aeron .logbuffer .LogBufferDescriptor ;
21
21
import io .aeron .logbuffer .LogBufferUnblocker ;
22
22
import org .agrona .collections .ArrayUtil ;
23
- import org .agrona .concurrent .NanoClock ;
24
23
import org .agrona .concurrent .UnsafeBuffer ;
25
24
import org .agrona .concurrent .status .AtomicCounter ;
26
25
import org .agrona .concurrent .status .Position ;
@@ -54,7 +53,7 @@ enum Status
54
53
private long tripLimit ;
55
54
private long consumerPosition ;
56
55
private long lastConsumerPosition ;
57
- private long timeOfLastConsumerPositionChangeNs ;
56
+ private long timeOfLastConsumerPositionUpdateNs ;
58
57
private long cleanPosition ;
59
58
private long timeOfLastStatusChangeNs ;
60
59
private int refCount = 0 ;
@@ -65,7 +64,6 @@ enum Status
65
64
private ReadablePosition [] subscriberPositions = EMPTY_POSITIONS ;
66
65
private final Position publisherLimit ;
67
66
private final UnsafeBuffer metaDataBuffer ;
68
- private final NanoClock nanoClock ;
69
67
private final RawLog rawLog ;
70
68
private final AtomicCounter unblockedPublications ;
71
69
@@ -76,8 +74,8 @@ public IpcPublication(
76
74
final Position publisherLimit ,
77
75
final RawLog rawLog ,
78
76
final long unblockTimeoutNs ,
77
+ final long nowNs ,
79
78
final SystemCounters systemCounters ,
80
- final NanoClock nanoClock ,
81
79
final boolean isExclusive )
82
80
{
83
81
this .registrationId = registrationId ;
@@ -86,7 +84,6 @@ public IpcPublication(
86
84
this .isExclusive = isExclusive ;
87
85
this .termBuffers = rawLog .termBuffers ();
88
86
this .initialTermId = initialTermId (rawLog .metaData ());
89
- this .nanoClock = nanoClock ;
90
87
91
88
final int termLength = rawLog .termLength ();
92
89
this .termBufferLength = termLength ;
@@ -102,7 +99,7 @@ public IpcPublication(
102
99
consumerPosition = producerPosition ();
103
100
lastConsumerPosition = consumerPosition ;
104
101
cleanPosition = consumerPosition ;
105
- timeOfLastConsumerPositionChangeNs = nanoClock . nanoTime () ;
102
+ timeOfLastConsumerPositionUpdateNs = nowNs ;
106
103
}
107
104
108
105
public int sessionId ()
@@ -148,11 +145,6 @@ public void close()
148
145
149
146
public void addSubscriber (final ReadablePosition subscriberPosition )
150
147
{
151
- if (subscriberPositions .length == 0 )
152
- {
153
- timeOfLastConsumerPositionChangeNs = nanoClock .nanoTime ();
154
- }
155
-
156
148
subscriberPositions = ArrayUtil .add (subscriberPositions , subscriberPosition );
157
149
}
158
150
@@ -326,10 +318,10 @@ private boolean isDrained()
326
318
327
319
private void checkForBlockedPublisher (final long timeNs )
328
320
{
329
- if (consumerPosition == lastConsumerPosition )
321
+ final long consumerPosition = this .consumerPosition ;
322
+ if (consumerPosition == lastConsumerPosition && producerPosition () > consumerPosition )
330
323
{
331
- if (timeNs > (timeOfLastConsumerPositionChangeNs + unblockTimeoutNs ) &&
332
- producerPosition () > consumerPosition )
324
+ if (timeNs > (timeOfLastConsumerPositionUpdateNs + unblockTimeoutNs ))
333
325
{
334
326
if (LogBufferUnblocker .unblock (termBuffers , metaDataBuffer , consumerPosition ))
335
327
{
@@ -339,7 +331,7 @@ private void checkForBlockedPublisher(final long timeNs)
339
331
}
340
332
else
341
333
{
342
- timeOfLastConsumerPositionChangeNs = timeNs ;
334
+ timeOfLastConsumerPositionUpdateNs = timeNs ;
343
335
lastConsumerPosition = consumerPosition ;
344
336
}
345
337
}
0 commit comments