Skip to content

Commit 02319f0

Browse files
committed
We're not boxing today
1 parent 77ff682 commit 02319f0

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

src/Servers/Kestrel/Core/src/Internal/Http2/Http2FrameWriter.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,13 +143,17 @@ private async Task WriteToOutputPipe()
143143
var observed = producer.UnobservedState;
144144
var currentState = producer.CurrentState;
145145

146+
// Avoid boxing the enum (though the JIT optimizes this eventually)
147+
static bool HasStateFlag(Http2OutputProducer.State state, Http2OutputProducer.State flags)
148+
=> (state & flags) == flags;
149+
146150
// Check if we need to write headers
147-
var flushHeaders = observed.HasFlag(Http2OutputProducer.State.FlushHeaders) && !currentState.HasFlag(Http2OutputProducer.State.FlushHeaders);
151+
var flushHeaders = HasStateFlag(observed, Http2OutputProducer.State.FlushHeaders) && !HasStateFlag(currentState, Http2OutputProducer.State.FlushHeaders);
148152

149153
(var hasMoreData, var reschedule, currentState, var waitingForWindowUpdates) = producer.ObserveDataAndState(buffer.Length, observed);
150154

151-
var aborted = currentState.HasFlag(Http2OutputProducer.State.Aborted);
152-
var completed = currentState.HasFlag(Http2OutputProducer.State.Completed) && !hasMoreData;
155+
var aborted = HasStateFlag(currentState, Http2OutputProducer.State.Aborted);
156+
var completed = HasStateFlag(currentState, Http2OutputProducer.State.Completed) && !hasMoreData;
153157

154158
FlushResult flushResult = default;
155159

0 commit comments

Comments
 (0)