Skip to content

Commit 98abe2b

Browse files
ReubenBondCopilot
andcommitted
fix(runtime): close invokable lifecycle gaps
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
1 parent 90190c1 commit 98abe2b

2 files changed

Lines changed: 16 additions & 13 deletions

File tree

src/Orleans.Core/Networking/Connection.cs

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -402,22 +402,11 @@ private async Task ProcessOutgoing()
402402
}
403403

404404
var flushResult = await output.FlushAsync();
405+
DisposeOneWayRequestBodies(inflight);
405406
if (flushResult.IsCompleted || flushResult.IsCanceled)
406407
{
407408
break;
408409
}
409-
410-
// Dispose one-way request bodies after they've been sent.
411-
// Request-response bodies are disposed when the invocation completes.
412-
foreach (var msg in inflight)
413-
{
414-
if (msg.Direction == Message.Directions.OneWay)
415-
{
416-
msg.DisposeBody();
417-
}
418-
}
419-
420-
inflight.Clear();
421410
}
422411
}
423412
catch (Exception exception)
@@ -431,11 +420,25 @@ private async Task ProcessOutgoing()
431420
}
432421
finally
433422
{
423+
DisposeOneWayRequestBodies(inflight);
434424
_transport!.Output.Complete();
435425
this.StartClosing(error);
436426
}
437427
}
438428

429+
private static void DisposeOneWayRequestBodies(List<Message> messages)
430+
{
431+
foreach (var message in messages)
432+
{
433+
if (message.Direction == Message.Directions.OneWay)
434+
{
435+
message.DisposeBody();
436+
}
437+
}
438+
439+
messages.Clear();
440+
}
441+
439442
private void RerouteMessage(Message message)
440443
{
441444
LogInformationReroutingMessage(this.Log, message, new EndPointLogValue(this.RemoteEndPoint));

src/Orleans.Core/Runtime/CallbackData.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public CallbackData(
3232

3333
public Message Message { get; } // might hold metadata used by response pipeline
3434

35-
public bool IsCompleted => this.completed == 1;
35+
public bool IsCompleted => Volatile.Read(ref completed) != 0;
3636

3737
public void SubscribeForCancellation(CancellationToken cancellationToken)
3838
{

0 commit comments

Comments
 (0)