@@ -101,6 +101,7 @@ void tryEmit(Try<Optional<T>> v) {
101
101
return ;
102
102
} else {
103
103
value = v ;
104
+ done = true ;
104
105
if (STATE .compareAndSet (this , s , NO_REQUEST_HAS_VALUE )) {
105
106
return ;
106
107
}
@@ -111,17 +112,13 @@ void tryEmit(Try<Optional<T>> v) {
111
112
112
113
@ Override
113
114
public void onError (Throwable t ) {
114
- done = true ;
115
-
116
115
Try <Optional <T >> v = Notification .error (t );
117
116
118
117
tryEmit (v );
119
118
}
120
119
121
120
@ Override
122
121
public void onComplete () {
123
- done = true ;
124
-
125
122
Try <Optional <T >> v = Notification .complete ();
126
123
127
124
tryEmit (v );
@@ -132,28 +129,28 @@ public void request(long n) {
132
129
if (SubscriptionHelper .validateRequest (n )) {
133
130
return ;
134
131
}
135
- s .request (n );
136
- if (BackpressureHelper .add (this , n ) == 0 ) {
137
- if (done ) {
138
- for (;;) {
139
- int s = state ;
140
- if (s == NO_REQUEST_HAS_VALUE ) {
141
- if (STATE .compareAndSet (this , s , HAS_REQUEST_HAS_VALUE )) {
142
- Try <Optional <T >> v = value ;
143
- value = null ;
144
- actual .onNext (v );
145
- actual .onComplete ();
146
- return ;
147
- }
148
- } else
149
- if (s == HAS_REQUEST_NO_VALUE || s == HAS_REQUEST_HAS_VALUE ) {
150
- return ;
151
- } else
152
- if (STATE .compareAndSet (this , s , HAS_REQUEST_NO_VALUE )) {
132
+ BackpressureHelper .add (this , n );
133
+ if (done ) {
134
+ for (;;) {
135
+ int s = state ;
136
+ if (s == NO_REQUEST_HAS_VALUE ) {
137
+ if (STATE .compareAndSet (this , s , HAS_REQUEST_HAS_VALUE )) {
138
+ Try <Optional <T >> v = value ;
139
+ value = null ;
140
+ actual .onNext (v );
141
+ actual .onComplete ();
153
142
return ;
154
143
}
144
+ } else
145
+ if (s == HAS_REQUEST_NO_VALUE || s == HAS_REQUEST_HAS_VALUE ) {
146
+ return ;
147
+ } else
148
+ if (STATE .compareAndSet (this , s , HAS_REQUEST_NO_VALUE )) {
149
+ return ;
155
150
}
156
151
}
152
+ } else {
153
+ s .request (n );
157
154
}
158
155
}
159
156
0 commit comments