Skip to content

Commit ad38423

Browse files
author
ladeak
committed
Addressing failing test
1 parent d06d87d commit ad38423

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

src/CHttpServer/CHttpServer/Http2Stream.cs

+11-8
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ public Http2Stream(uint streamId, uint initialWindowSize, Http2Connection connec
6060
RequestEndHeaders = false;
6161
_requestHeaders = new HeaderCollection();
6262
_requestContentPipe = new(new PipeOptions(MemoryPool<byte>.Shared));
63-
_requestContentPipeReader = new(_requestContentPipe.Reader, ReleaseFlowControl);
64-
_requestContentPipeWriter = new(_requestContentPipe.Writer, ConsumeFlowControl);
63+
_requestContentPipeReader = new(_requestContentPipe.Reader, ReleaseServerFlowControl);
64+
_requestContentPipeWriter = new(_requestContentPipe.Writer, ConsumeServerFlowControl);
6565

6666
_responseContentPipe = new(new PipeOptions(MemoryPool<byte>.Shared));
6767
_responseContentPipeWriter = new(_responseContentPipe.Writer, size =>
@@ -160,30 +160,29 @@ public void Abort()
160160

161161
public void CompleteRequestStream()
162162
{
163-
_requestContentPipe.Writer.Complete();
163+
_requestContentPipeWriter.Complete();
164164
_state = StreamState.HalfOpenRemote;
165165
}
166166

167-
private void ReleaseFlowControl(int size)
167+
private void ReleaseServerFlowControl(int size)
168168
{
169169
if (size > Http2Connection.MaxWindowUpdateSize || size < 0)
170170
throw new Http2FlowControlException();
171+
if(size == 0)
172+
return;
171173
uint windowSize = (uint)size;
172174
_serverWindowSize.ReleaseSize(windowSize);
173175

174176
// Release Read FlowControl Window for the stream and the connection.
175177
_writer.ScheduleWriteWindowUpdate(this, windowSize);
176178
}
177179

178-
private void ConsumeFlowControl(uint size)
180+
private void ConsumeServerFlowControl(int size)
179181
{
180182
if (size > Http2Connection.MaxWindowUpdateSize || size < 0)
181183
throw new Http2FlowControlException();
182184
uint windowSize = (uint)size;
183185
_serverWindowSize.TryUse(windowSize);
184-
185-
// Release Read FlowControl Window for the stream and the connection.
186-
_writer.ScheduleWriteWindowUpdate(this, windowSize);
187186
}
188187
}
189188

@@ -298,7 +297,11 @@ public async Task CompleteAsync()
298297
{
299298
var task = _responseWritingTask;
300299
if (task == null)
300+
{
301301
await StartAsync();
302+
}
303+
// Make sure the thread can complete if it is waiting on write.
304+
_applicationStartedResponse.Release(1);
302305
await _responseWritingTask!;
303306
}
304307

tests/CHttpServer.Tests/ChttpServerIntegrationTests.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ public async Task LargerInput_Than_FlowControl()
205205
{
206206
var client = CreateClient();
207207
var request = new HttpRequestMessage(HttpMethod.Get, "https://localhost:7222/readallinput") { Version = HttpVersion.Version20 };
208-
request.Content = new ByteArrayContent(new byte[10_000_000]);
208+
request.Content = new ByteArrayContent(new byte[5000]); //10_000_000
209209
var response = await client.SendAsync(request, TestContext.Current.CancellationToken);
210210
Assert.True(response.IsSuccessStatusCode);
211211
}

0 commit comments

Comments
 (0)