Skip to content

Commit 46f9138

Browse files
committed
No need to allocate a new head node.
1 parent 82d7b9c commit 46f9138

File tree

1 file changed

+13
-15
lines changed

1 file changed

+13
-15
lines changed

src/main/java/rx/internal/operators/OperatorReplay.java

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -897,29 +897,24 @@ final void removeFirst() {
897897
size--;
898898
// can't just move the head because it would retain the very first value
899899
// can't null out the head's value because of late replayers would see null
900-
setFirst(next.get());
900+
setFirst(next);
901901
}
902-
final void removeSome(int n) {
902+
/* test */ final void removeSome(int n) {
903903
Node head = get();
904904
while (n > 0) {
905905
head = head.get();
906906
n--;
907907
size--;
908908
}
909909

910-
setFirst(head.get());
910+
setFirst(head);
911911
}
912912
/**
913913
* Arranges the given node is the new head from now on.
914914
* @param n
915915
*/
916916
final void setFirst(Node n) {
917-
Node newHead = new Node(null);
918-
newHead.lazySet(n);
919-
if (n == null) {
920-
tail = newHead;
921-
}
922-
set(newHead);
917+
set(n);
923918
}
924919

925920
@Override
@@ -1119,21 +1114,23 @@ Object leaveTransform(Object value) {
11191114
void truncate() {
11201115
long timeLimit = scheduler.now() - maxAgeInMillis;
11211116

1122-
Node head = get();
1123-
Node next = head.get();
1117+
Node prev = get();
1118+
Node next = prev.get();
11241119

11251120
int e = 0;
11261121
for (;;) {
11271122
if (next != null) {
11281123
if (size > limit) {
11291124
e++;
11301125
size--;
1126+
prev = next;
11311127
next = next.get();
11321128
} else {
11331129
Timestamped<?> v = (Timestamped<?>)next.value;
11341130
if (v.getTimestampMillis() <= timeLimit) {
11351131
e++;
11361132
size--;
1133+
prev = next;
11371134
next = next.get();
11381135
} else {
11391136
break;
@@ -1144,15 +1141,15 @@ void truncate() {
11441141
}
11451142
}
11461143
if (e != 0) {
1147-
setFirst(next);
1144+
setFirst(prev);
11481145
}
11491146
}
11501147
@Override
11511148
void truncateFinal() {
11521149
long timeLimit = scheduler.now() - maxAgeInMillis;
11531150

1154-
Node head = get();
1155-
Node next = head.get();
1151+
Node prev = get();
1152+
Node next = prev.get();
11561153

11571154
int e = 0;
11581155
for (;;) {
@@ -1161,6 +1158,7 @@ void truncateFinal() {
11611158
if (v.getTimestampMillis() <= timeLimit) {
11621159
e++;
11631160
size--;
1161+
prev = next;
11641162
next = next.get();
11651163
} else {
11661164
break;
@@ -1170,7 +1168,7 @@ void truncateFinal() {
11701168
}
11711169
}
11721170
if (e != 0) {
1173-
setFirst(next);
1171+
setFirst(prev);
11741172
}
11751173
}
11761174
}

0 commit comments

Comments
 (0)