File tree Expand file tree Collapse file tree 1 file changed +15
-13
lines changed
src/main/java/rx/internal/operators Expand file tree Collapse file tree 1 file changed +15
-13
lines changed Original file line number Diff line number Diff line change @@ -897,24 +897,29 @@ final void removeFirst() {
897
897
size --;
898
898
// can't just move the head because it would retain the very first value
899
899
// can't null out the head's value because of late replayers would see null
900
- setFirst (next );
900
+ setFirst (next . get () );
901
901
}
902
- /* test */ final void removeSome (int n ) {
902
+ final void removeSome (int n ) {
903
903
Node head = get ();
904
904
while (n > 0 ) {
905
905
head = head .get ();
906
906
n --;
907
907
size --;
908
908
}
909
909
910
- setFirst (head );
910
+ setFirst (head . get () );
911
911
}
912
912
/**
913
913
* Arranges the given node is the new head from now on.
914
914
* @param n
915
915
*/
916
916
final void setFirst (Node n ) {
917
- set (n );
917
+ Node newHead = new Node (null );
918
+ newHead .lazySet (n );
919
+ if (n == null ) {
920
+ tail = newHead ;
921
+ }
922
+ set (newHead );
918
923
}
919
924
920
925
@ Override
@@ -1114,23 +1119,21 @@ Object leaveTransform(Object value) {
1114
1119
void truncate () {
1115
1120
long timeLimit = scheduler .now () - maxAgeInMillis ;
1116
1121
1117
- Node prev = get ();
1118
- Node next = prev .get ();
1122
+ Node head = get ();
1123
+ Node next = head .get ();
1119
1124
1120
1125
int e = 0 ;
1121
1126
for (;;) {
1122
1127
if (next != null ) {
1123
1128
if (size > limit ) {
1124
1129
e ++;
1125
1130
size --;
1126
- prev = next ;
1127
1131
next = next .get ();
1128
1132
} else {
1129
1133
Timestamped <?> v = (Timestamped <?>)next .value ;
1130
1134
if (v .getTimestampMillis () <= timeLimit ) {
1131
1135
e ++;
1132
1136
size --;
1133
- prev = next ;
1134
1137
next = next .get ();
1135
1138
} else {
1136
1139
break ;
@@ -1141,15 +1144,15 @@ void truncate() {
1141
1144
}
1142
1145
}
1143
1146
if (e != 0 ) {
1144
- setFirst (prev );
1147
+ setFirst (next );
1145
1148
}
1146
1149
}
1147
1150
@ Override
1148
1151
void truncateFinal () {
1149
1152
long timeLimit = scheduler .now () - maxAgeInMillis ;
1150
1153
1151
- Node prev = get ();
1152
- Node next = prev .get ();
1154
+ Node head = get ();
1155
+ Node next = head .get ();
1153
1156
1154
1157
int e = 0 ;
1155
1158
for (;;) {
@@ -1158,7 +1161,6 @@ void truncateFinal() {
1158
1161
if (v .getTimestampMillis () <= timeLimit ) {
1159
1162
e ++;
1160
1163
size --;
1161
- prev = next ;
1162
1164
next = next .get ();
1163
1165
} else {
1164
1166
break ;
@@ -1168,7 +1170,7 @@ void truncateFinal() {
1168
1170
}
1169
1171
}
1170
1172
if (e != 0 ) {
1171
- setFirst (prev );
1173
+ setFirst (next );
1172
1174
}
1173
1175
}
1174
1176
}
You can’t perform that action at this time.
0 commit comments