@@ -128,48 +128,63 @@ private enum State {
128
128
public void onSubscribe (AbstractResponseBodyFlushProcessor processor ,
129
129
Subscription subscription ) {
130
130
Objects .requireNonNull (subscription , "Subscription cannot be null" );
131
- if (processor .changeState (this , SUBSCRIBED )) {
131
+ if (processor .changeState (this , REQUESTED )) {
132
132
processor .subscription = subscription ;
133
133
subscription .request (1 );
134
134
}
135
135
else {
136
136
super .onSubscribe (processor , subscription );
137
137
}
138
138
}
139
- }, SUBSCRIBED {
139
+ },
140
+ REQUESTED {
140
141
@ Override
141
142
public void onNext (AbstractResponseBodyFlushProcessor processor ,
142
143
Publisher <DataBuffer > chunk ) {
143
- Processor <DataBuffer , Void > chunkProcessor =
144
- processor .createBodyProcessor ();
145
- chunk .subscribe (chunkProcessor );
146
- chunkProcessor .subscribe (new WriteSubscriber (processor ));
144
+ if (processor .changeState (this , RECEIVED )) {
145
+ Processor <DataBuffer , Void > chunkProcessor =
146
+ processor .createBodyProcessor ();
147
+ chunk .subscribe (chunkProcessor );
148
+ chunkProcessor .subscribe (new WriteSubscriber (processor ));
149
+ }
147
150
}
148
151
149
152
@ Override
150
153
void onComplete (AbstractResponseBodyFlushProcessor processor ) {
151
- processor .subscriberCompleted = true ;
154
+ if (processor .changeState (this , COMPLETED )) {
155
+ processor .publisherDelegate .publishComplete ();
156
+ }
152
157
}
153
-
158
+ },
159
+ RECEIVED {
154
160
@ Override
155
161
public void writeComplete (AbstractResponseBodyFlushProcessor processor ) {
162
+ try {
163
+ processor .flush ();
164
+ }
165
+ catch (IOException ex ) {
166
+ processor .cancel ();
167
+ processor .onError (ex );
168
+ }
169
+
156
170
if (processor .subscriberCompleted ) {
157
171
if (processor .changeState (this , COMPLETED )) {
158
172
processor .publisherDelegate .publishComplete ();
159
173
}
160
174
}
161
175
else {
162
- try {
163
- processor .flush ();
176
+ if (processor .changeState (this , REQUESTED )) {
164
177
processor .subscription .request (1 );
165
178
}
166
- catch (IOException ex ) {
167
- processor .cancel ();
168
- processor .onError (ex );
169
- }
170
179
}
171
180
}
172
- }, COMPLETED {
181
+
182
+ @ Override
183
+ void onComplete (AbstractResponseBodyFlushProcessor processor ) {
184
+ processor .subscriberCompleted = true ;
185
+ }
186
+ },
187
+ COMPLETED {
173
188
@ Override
174
189
public void onNext (AbstractResponseBodyFlushProcessor processor ,
175
190
Publisher <DataBuffer > publisher ) {
@@ -186,11 +201,6 @@ void onError(AbstractResponseBodyFlushProcessor processor, Throwable t) {
186
201
void onComplete (AbstractResponseBodyFlushProcessor processor ) {
187
202
// ignore
188
203
}
189
-
190
- @ Override
191
- public void writeComplete (AbstractResponseBodyFlushProcessor processor ) {
192
- // ignore
193
- }
194
204
};
195
205
196
206
public void onSubscribe (AbstractResponseBodyFlushProcessor processor ,
@@ -214,7 +224,7 @@ void onComplete(AbstractResponseBodyFlushProcessor processor) {
214
224
}
215
225
216
226
public void writeComplete (AbstractResponseBodyFlushProcessor processor ) {
217
- throw new IllegalStateException ( toString ());
227
+ // ignore
218
228
}
219
229
220
230
private static class WriteSubscriber implements Subscriber <Void > {
0 commit comments