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() {
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 );
900+ setFirst (next . get () );
901901 }
902- /* test */ final void removeSome (int n ) {
902+ 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 );
910+ setFirst (head . get () );
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- set (n );
917+ Node newHead = new Node (null );
918+ newHead .lazySet (n );
919+ if (n == null ) {
920+ tail = newHead ;
921+ }
922+ set (newHead );
918923 }
919924
920925 @ Override
@@ -1114,23 +1119,21 @@ Object leaveTransform(Object value) {
11141119 void truncate () {
11151120 long timeLimit = scheduler .now () - maxAgeInMillis ;
11161121
1117- Node prev = get ();
1118- Node next = prev .get ();
1122+ Node head = get ();
1123+ Node next = head .get ();
11191124
11201125 int e = 0 ;
11211126 for (;;) {
11221127 if (next != null ) {
11231128 if (size > limit ) {
11241129 e ++;
11251130 size --;
1126- prev = next ;
11271131 next = next .get ();
11281132 } else {
11291133 Timestamped <?> v = (Timestamped <?>)next .value ;
11301134 if (v .getTimestampMillis () <= timeLimit ) {
11311135 e ++;
11321136 size --;
1133- prev = next ;
11341137 next = next .get ();
11351138 } else {
11361139 break ;
@@ -1141,15 +1144,15 @@ void truncate() {
11411144 }
11421145 }
11431146 if (e != 0 ) {
1144- setFirst (prev );
1147+ setFirst (next );
11451148 }
11461149 }
11471150 @ Override
11481151 void truncateFinal () {
11491152 long timeLimit = scheduler .now () - maxAgeInMillis ;
11501153
1151- Node prev = get ();
1152- Node next = prev .get ();
1154+ Node head = get ();
1155+ Node next = head .get ();
11531156
11541157 int e = 0 ;
11551158 for (;;) {
@@ -1158,7 +1161,6 @@ void truncateFinal() {
11581161 if (v .getTimestampMillis () <= timeLimit ) {
11591162 e ++;
11601163 size --;
1161- prev = next ;
11621164 next = next .get ();
11631165 } else {
11641166 break ;
@@ -1168,7 +1170,7 @@ void truncateFinal() {
11681170 }
11691171 }
11701172 if (e != 0 ) {
1171- setFirst (prev );
1173+ setFirst (next );
11721174 }
11731175 }
11741176 }
You can’t perform that action at this time.
0 commit comments