From 5f97d69f79787514f2e91082bfe7a61fb57461f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6llner?= Date: Wed, 6 Nov 2019 18:48:25 +0100 Subject: [PATCH] Clearly indicated that 'isTailCall' parameter of Proxy.Call is obsolete. It never had any influence, since tail calls are automatically induced (somewhere else). --- Capnp.Net.Runtime.Tests/TcpRpc.cs | 36 +++++++++---------- Capnp.Net.Runtime/Rpc/BareProxy.cs | 4 +-- Capnp.Net.Runtime/Rpc/ConsumedCapability.cs | 2 +- .../Rpc/Interception/CallContext.cs | 2 +- .../Rpc/Interception/CensorCapability.cs | 2 +- Capnp.Net.Runtime/Rpc/LazyCapability.cs | 10 +++--- .../Rpc/LocalAnswerCapability.cs | 10 +++--- Capnp.Net.Runtime/Rpc/LocalCapability.cs | 2 +- Capnp.Net.Runtime/Rpc/PromisedCapability.cs | 6 ++-- Capnp.Net.Runtime/Rpc/Proxy.cs | 8 +++-- .../Rpc/RemoteAnswerCapability.cs | 6 ++-- Capnp.Net.Runtime/Rpc/RemoteCapability.cs | 2 +- .../Rpc/RemoteResolvingCapability.cs | 6 ++-- Capnp.Net.Runtime/Rpc/Vine.cs | 2 +- 14 files changed, 48 insertions(+), 50 deletions(-) diff --git a/Capnp.Net.Runtime.Tests/TcpRpc.cs b/Capnp.Net.Runtime.Tests/TcpRpc.cs index fef274c..b5482e4 100644 --- a/Capnp.Net.Runtime.Tests/TcpRpc.cs +++ b/Capnp.Net.Runtime.Tests/TcpRpc.cs @@ -141,7 +141,7 @@ namespace Capnp.Net.Runtime.Tests var args = DynamicSerializerState.CreateForRpc(); args.SetStruct(1, 0); args.WriteData(0, 123456); - using (var answer = main.Call(0x1234567812345678, 0x3333, args, false)) + using (var answer = main.Call(0x1234567812345678, 0x3333, args)) { Assert.IsTrue(mock.WhenCalled.Wait(MediumTimeout)); (var interfaceId, var methodId, var inargs, var ct) = mock.WhenCalled.Result; @@ -182,7 +182,7 @@ namespace Capnp.Net.Runtime.Tests var args = DynamicSerializerState.CreateForRpc(); args.SetStruct(1, 0); args.WriteData(0, 123456); - using (var answer = main.Call(0x1234567812345678, 0x3333, args, false)) + using (var answer = main.Call(0x1234567812345678, 0x3333, args)) { Assert.IsTrue(mock.WhenCalled.Wait(MediumTimeout)); (var interfaceId, var methodId, var inargs, var ct) = mock.WhenCalled.Result; @@ -223,7 +223,7 @@ namespace Capnp.Net.Runtime.Tests args.SetStruct(1, 0); args.WriteData(0, 123456); CancellationToken ctx; - using (var answer = main.Call(0x1234567812345678, 0x3333, args, false)) + using (var answer = main.Call(0x1234567812345678, 0x3333, args)) { Assert.IsTrue(mock.WhenCalled.Wait(MediumTimeout)); (var interfaceId, var methodId, var inargs, var ct) = mock.WhenCalled.Result; @@ -267,7 +267,7 @@ namespace Capnp.Net.Runtime.Tests args.WriteData(0, 123456); CancellationToken ctx; IPromisedAnswer answer; - using (answer = main.Call(0x1234567812345678, 0x3333, args, false)) + using (answer = main.Call(0x1234567812345678, 0x3333, args)) { Assert.IsTrue(mock.WhenCalled.Wait(MediumTimeout)); (var interfaceId, var methodId, var inargs, var ct) = mock.WhenCalled.Result; @@ -324,7 +324,7 @@ namespace Capnp.Net.Runtime.Tests var args = DynamicSerializerState.CreateForRpc(); args.SetStruct(1, 0); args.WriteData(0, 123456); - using (var answer = main.Call(0x1234567812345678, 0x3333, args, false)) + using (var answer = main.Call(0x1234567812345678, 0x3333, args)) { Assert.IsTrue(mock.WhenCalled.Wait(MediumTimeout)); (var interfaceId, var methodId, var inargs, var ct) = mock.WhenCalled.Result; @@ -361,7 +361,7 @@ namespace Capnp.Net.Runtime.Tests var args = DynamicSerializerState.CreateForRpc(); args.SetStruct(1, 0); args.WriteData(0, 123456); - using (var answer = main.Call(0x1234567812345678, 0x3333, args, true)) + using (var answer = main.Call(0x1234567812345678, 0x3333, args)) { Assert.IsTrue(mock.WhenCalled.Wait(MediumTimeout)); @@ -372,7 +372,7 @@ namespace Capnp.Net.Runtime.Tests args2.SetStruct(1, 0); args2.WriteData(0, 654321); - using (var answer2 = pipelined.Call(0x8765432187654321, 0x4444, args2, false)) + using (var answer2 = pipelined.Call(0x8765432187654321, 0x4444, args2)) { (var interfaceId, var methodId, var inargs, var ct) = mock.WhenCalled.Result; Assert.AreEqual(0x1234567812345678, interfaceId); @@ -434,7 +434,7 @@ namespace Capnp.Net.Runtime.Tests var args = DynamicSerializerState.CreateForRpc(); args.SetStruct(1, 0); args.WriteData(0, 123456); - using (var answer = main.Call(0x1234567812345678, 0x3333, args, true)) + using (var answer = main.Call(0x1234567812345678, 0x3333, args)) { Assert.IsTrue(mock.WhenCalled.Wait(MediumTimeout)); @@ -464,7 +464,7 @@ namespace Capnp.Net.Runtime.Tests args2.SetStruct(1, 0); args2.WriteData(0, 654321); - using (var answer2 = pipelined.Call(0x8765432187654321, 0x4444, args2, false)) + using (var answer2 = pipelined.Call(0x8765432187654321, 0x4444, args2)) { Assert.IsTrue(answer.WhenReturned.Wait(MediumTimeout)); Assert.IsTrue(mock2.WhenCalled.Wait(MediumTimeout)); @@ -510,7 +510,7 @@ namespace Capnp.Net.Runtime.Tests var args = DynamicSerializerState.CreateForRpc(); args.SetStruct(1, 0); args.WriteData(0, 123456); - using (var answer = main.Call(0x1234567812345678, 0x3333, args, true)) + using (var answer = main.Call(0x1234567812345678, 0x3333, args)) { Assert.IsTrue(mock.WhenCalled.Wait(MediumTimeout)); @@ -524,8 +524,8 @@ namespace Capnp.Net.Runtime.Tests args3.SetStruct(1, 0); args3.WriteData(0, 222222); - using (var answer2 = pipelined.Call(0x1111111111111111, 0x1111, args2, false)) - using (var answer3 = pipelined.Call(0x2222222222222222, 0x2222, args3, false)) + using (var answer2 = pipelined.Call(0x1111111111111111, 0x1111, args2)) + using (var answer3 = pipelined.Call(0x2222222222222222, 0x2222, args3)) { (var interfaceId, var methodId, var inargs, var ct) = mock.WhenCalled.Result; @@ -555,8 +555,8 @@ namespace Capnp.Net.Runtime.Tests args5.SetStruct(1, 0); args5.WriteData(0, 444444); - using (var answer4 = pipelined.Call(0x3333333333333333, 0x3333, args4, false)) - using (var answer5 = pipelined.Call(0x4444444444444444, 0x4444, args5, false)) + using (var answer4 = pipelined.Call(0x3333333333333333, 0x3333, args4)) + using (var answer5 = pipelined.Call(0x4444444444444444, 0x4444, args5)) { var call2 = mock2.WhenCalled; var call3 = mock2.WhenCalled; @@ -628,7 +628,7 @@ namespace Capnp.Net.Runtime.Tests args.SetStruct(1, 0); args.WriteData(0, 123456); BareProxy pipelined; - using (var answer = main.Call(0x1234567812345678, 0x3333, args, true)) + using (var answer = main.Call(0x1234567812345678, 0x3333, args)) { Assert.IsTrue(mock.WhenCalled.Wait(MediumTimeout)); @@ -643,7 +643,7 @@ namespace Capnp.Net.Runtime.Tests try { - pipelined.Call(0x8765432187654321, 0x4444, args2, false); + pipelined.Call(0x8765432187654321, 0x4444, args2); Assert.Fail("Expected an exception here"); } catch (ObjectDisposedException) @@ -675,7 +675,7 @@ namespace Capnp.Net.Runtime.Tests args.SetStruct(1, 0); args.WriteData(0, 123456); IPromisedAnswer answer2; - using (var answer = main.Call(0x1234567812345678, 0x3333, args, true)) + using (var answer = main.Call(0x1234567812345678, 0x3333, args)) { Assert.IsTrue(mock.WhenCalled.Wait(MediumTimeout)); @@ -685,7 +685,7 @@ namespace Capnp.Net.Runtime.Tests args2.SetStruct(1, 0); args2.WriteData(0, 654321); - answer2 = pipelined.Call(0x8765432187654321, 0x4444, args2, false); + answer2 = pipelined.Call(0x8765432187654321, 0x4444, args2); } using (answer2) diff --git a/Capnp.Net.Runtime/Rpc/BareProxy.cs b/Capnp.Net.Runtime/Rpc/BareProxy.cs index 8f133bc..db68fc4 100644 --- a/Capnp.Net.Runtime/Rpc/BareProxy.cs +++ b/Capnp.Net.Runtime/Rpc/BareProxy.cs @@ -45,9 +45,9 @@ /// Method arguments /// Whether it is a tail call /// Answer promise - public IPromisedAnswer Call(ulong interfaceId, ushort methodId, DynamicSerializerState args, bool tailCall) + public IPromisedAnswer Call(ulong interfaceId, ushort methodId, DynamicSerializerState args) { - return base.Call(interfaceId, methodId, args, tailCall); + return base.Call(interfaceId, methodId, args, default); } } } diff --git a/Capnp.Net.Runtime/Rpc/ConsumedCapability.cs b/Capnp.Net.Runtime/Rpc/ConsumedCapability.cs index 91863f0..8152d44 100644 --- a/Capnp.Net.Runtime/Rpc/ConsumedCapability.cs +++ b/Capnp.Net.Runtime/Rpc/ConsumedCapability.cs @@ -10,7 +10,7 @@ namespace Capnp.Rpc /// public abstract class ConsumedCapability { - internal abstract IPromisedAnswer DoCall(ulong interfaceId, ushort methodId, DynamicSerializerState args, bool tailCall); + internal abstract IPromisedAnswer DoCall(ulong interfaceId, ushort methodId, DynamicSerializerState args); /// /// Request the RPC engine to release this capability from its import table, diff --git a/Capnp.Net.Runtime/Rpc/Interception/CallContext.cs b/Capnp.Net.Runtime/Rpc/Interception/CallContext.cs index 645fe5b..67bb1e6 100644 --- a/Capnp.Net.Runtime/Rpc/Interception/CallContext.cs +++ b/Capnp.Net.Runtime/Rpc/Interception/CallContext.cs @@ -289,7 +289,7 @@ namespace Capnp.Rpc.Interception throw new InvalidOperationException("Bob is null"); } - var answer = BobProxy.Call(InterfaceId, MethodId, InArgs.Rewrap(), false, CancelToBob); + var answer = BobProxy.Call(InterfaceId, MethodId, InArgs.Rewrap(), default, CancelToBob); State = InterceptionState.ForwardedToBob; diff --git a/Capnp.Net.Runtime/Rpc/Interception/CensorCapability.cs b/Capnp.Net.Runtime/Rpc/Interception/CensorCapability.cs index 4fc0feb..abaa526 100644 --- a/Capnp.Net.Runtime/Rpc/Interception/CensorCapability.cs +++ b/Capnp.Net.Runtime/Rpc/Interception/CensorCapability.cs @@ -19,7 +19,7 @@ InterceptedCapability.Release(); } - internal override IPromisedAnswer DoCall(ulong interfaceId, ushort methodId, DynamicSerializerState args, bool tailCall) + internal override IPromisedAnswer DoCall(ulong interfaceId, ushort methodId, DynamicSerializerState args) { var cc = new CallContext(this, interfaceId, methodId, args); Policy.OnCallFromAlice(cc); diff --git a/Capnp.Net.Runtime/Rpc/LazyCapability.cs b/Capnp.Net.Runtime/Rpc/LazyCapability.cs index 607b4a6..ed2ac40 100644 --- a/Capnp.Net.Runtime/Rpc/LazyCapability.cs +++ b/Capnp.Net.Runtime/Rpc/LazyCapability.cs @@ -81,9 +81,7 @@ namespace Capnp.Rpc public Task WhenResolved { get; } - async Task CallImpl(ulong interfaceId, ushort methodId, - DynamicSerializerState args, bool pipeline, - CancellationToken cancellationToken) + async Task CallImpl(ulong interfaceId, ushort methodId, DynamicSerializerState args, CancellationToken cancellationToken) { var cap = await WhenResolved; @@ -92,7 +90,7 @@ namespace Capnp.Rpc if (cap == null) throw new RpcException("Broken capability"); - var call = cap.Call(interfaceId, methodId, args, pipeline); + var call = cap.Call(interfaceId, methodId, args, default); var whenReturned = call.WhenReturned; using (var registration = cancellationToken.Register(call.Dispose)) @@ -101,10 +99,10 @@ namespace Capnp.Rpc } } - internal override IPromisedAnswer DoCall(ulong interfaceId, ushort methodId, DynamicSerializerState args, bool pipeline) + internal override IPromisedAnswer DoCall(ulong interfaceId, ushort methodId, DynamicSerializerState args) { var cts = new CancellationTokenSource(); - return new LocalAnswer(cts, CallImpl(interfaceId, methodId, args, pipeline, cts.Token)); + return new LocalAnswer(cts, CallImpl(interfaceId, methodId, args, cts.Token)); } } } diff --git a/Capnp.Net.Runtime/Rpc/LocalAnswerCapability.cs b/Capnp.Net.Runtime/Rpc/LocalAnswerCapability.cs index b4b5e2b..3dbf83b 100644 --- a/Capnp.Net.Runtime/Rpc/LocalAnswerCapability.cs +++ b/Capnp.Net.Runtime/Rpc/LocalAnswerCapability.cs @@ -57,9 +57,7 @@ namespace Capnp.Rpc } } - async Task CallImpl(ulong interfaceId, ushort methodId, - DynamicSerializerState args, bool pipeline, - CancellationToken cancellationToken) + async Task CallImpl(ulong interfaceId, ushort methodId, DynamicSerializerState args, CancellationToken cancellationToken) { var cap = await AwaitResolved(); @@ -68,7 +66,7 @@ namespace Capnp.Rpc if (cap == null) throw new RpcException("Broken capability"); - var call = cap.Call(interfaceId, methodId, args, pipeline); + var call = cap.Call(interfaceId, methodId, args, default); var whenReturned = call.WhenReturned; using (var registration = cancellationToken.Register(() => call.Dispose())) @@ -77,10 +75,10 @@ namespace Capnp.Rpc } } - internal override IPromisedAnswer DoCall(ulong interfaceId, ushort methodId, DynamicSerializerState args, bool pipeline) + internal override IPromisedAnswer DoCall(ulong interfaceId, ushort methodId, DynamicSerializerState args) { var cts = new CancellationTokenSource(); - return new LocalAnswer(cts, CallImpl(interfaceId, methodId, args, pipeline, cts.Token)); + return new LocalAnswer(cts, CallImpl(interfaceId, methodId, args, cts.Token)); } protected override void ReleaseRemotely() diff --git a/Capnp.Net.Runtime/Rpc/LocalCapability.cs b/Capnp.Net.Runtime/Rpc/LocalCapability.cs index 60782fc..3328a5f 100644 --- a/Capnp.Net.Runtime/Rpc/LocalCapability.cs +++ b/Capnp.Net.Runtime/Rpc/LocalCapability.cs @@ -42,7 +42,7 @@ namespace Capnp.Rpc ProvidedCap.Relinquish(); } - internal override IPromisedAnswer DoCall(ulong interfaceId, ushort methodId, DynamicSerializerState args, bool pipeline) + internal override IPromisedAnswer DoCall(ulong interfaceId, ushort methodId, DynamicSerializerState args) { var cts = new CancellationTokenSource(); var call = ProvidedCap.Invoke(interfaceId, methodId, args, cts.Token); diff --git a/Capnp.Net.Runtime/Rpc/PromisedCapability.cs b/Capnp.Net.Runtime/Rpc/PromisedCapability.cs index 87718a7..b704c7e 100644 --- a/Capnp.Net.Runtime/Rpc/PromisedCapability.cs +++ b/Capnp.Net.Runtime/Rpc/PromisedCapability.cs @@ -169,13 +169,13 @@ namespace Capnp.Rpc wr.ImportedCap = _remoteId; } - internal override IPromisedAnswer DoCall(ulong interfaceId, ushort methodId, DynamicSerializerState args, bool pipeline) + internal override IPromisedAnswer DoCall(ulong interfaceId, ushort methodId, DynamicSerializerState args) { lock (_reentrancyBlocker) { if (_resolvedCap.Task.IsCompleted) { - return CallOnResolution(interfaceId, methodId, args, pipeline); + return CallOnResolution(interfaceId, methodId, args); } else { @@ -184,7 +184,7 @@ namespace Capnp.Rpc } } - var promisedAnswer = base.DoCall(interfaceId, methodId, args, pipeline); + var promisedAnswer = base.DoCall(interfaceId, methodId, args); TrackCall(promisedAnswer.WhenReturned); return promisedAnswer; } diff --git a/Capnp.Net.Runtime/Rpc/Proxy.cs b/Capnp.Net.Runtime/Rpc/Proxy.cs index c0516c6..1574c5d 100644 --- a/Capnp.Net.Runtime/Rpc/Proxy.cs +++ b/Capnp.Net.Runtime/Rpc/Proxy.cs @@ -66,13 +66,15 @@ namespace Capnp.Rpc /// Interface ID to call /// Method ID to call /// Method arguments ("param struct") - /// Whether it is a tail call + /// This flag is ignored. It is there to preserve compatibility with the + /// code generator and will be removed in future versions. /// For cancelling an ongoing method call /// An answer promise /// This instance was disposed, or transport-layer stream was disposed. /// Capability is broken. /// An I/O error occurs. - protected internal IPromisedAnswer Call(ulong interfaceId, ushort methodId, DynamicSerializerState args, bool tailCall, CancellationToken cancellationToken = default) + protected internal IPromisedAnswer Call(ulong interfaceId, ushort methodId, DynamicSerializerState args, + bool obsoleteAndIgnored, CancellationToken cancellationToken = default) { if (_disposedValue) throw new ObjectDisposedException(nameof(Proxy)); @@ -80,7 +82,7 @@ namespace Capnp.Rpc if (ConsumedCap == null) throw new InvalidOperationException("Cannot call null capability"); - var answer = ConsumedCap.DoCall(interfaceId, methodId, args, tailCall); + var answer = ConsumedCap.DoCall(interfaceId, methodId, args); if (cancellationToken.CanBeCanceled) { diff --git a/Capnp.Net.Runtime/Rpc/RemoteAnswerCapability.cs b/Capnp.Net.Runtime/Rpc/RemoteAnswerCapability.cs index e192a15..27f8961 100644 --- a/Capnp.Net.Runtime/Rpc/RemoteAnswerCapability.cs +++ b/Capnp.Net.Runtime/Rpc/RemoteAnswerCapability.cs @@ -99,7 +99,7 @@ namespace Capnp.Rpc _access.Serialize(wr.PromisedAnswer); } - internal override IPromisedAnswer DoCall(ulong interfaceId, ushort methodId, DynamicSerializerState args, bool pipeline) + internal override IPromisedAnswer DoCall(ulong interfaceId, ushort methodId, DynamicSerializerState args) { lock (_question.ReentrancyBlocker) { @@ -111,7 +111,7 @@ namespace Capnp.Rpc throw new RpcException("Answer did not resolve to expected capability"); } - return CallOnResolution(interfaceId, methodId, args, pipeline); + return CallOnResolution(interfaceId, methodId, args); } else { @@ -130,7 +130,7 @@ namespace Capnp.Rpc _question.DisallowFinish(); ++_pendingCallsOnPromise; - var promisedAnswer = base.DoCall(interfaceId, methodId, args, pipeline); + var promisedAnswer = base.DoCall(interfaceId, methodId, args); ReAllowFinishWhenDone(promisedAnswer.WhenReturned); async void DecrementPendingCallsOnPromiseWhenReturned() diff --git a/Capnp.Net.Runtime/Rpc/RemoteCapability.cs b/Capnp.Net.Runtime/Rpc/RemoteCapability.cs index e78d7c5..2dc470e 100644 --- a/Capnp.Net.Runtime/Rpc/RemoteCapability.cs +++ b/Capnp.Net.Runtime/Rpc/RemoteCapability.cs @@ -15,7 +15,7 @@ namespace Capnp.Rpc _ep = ep; } - internal override IPromisedAnswer DoCall(ulong interfaceId, ushort methodId, DynamicSerializerState args, bool tailCall) + internal override IPromisedAnswer DoCall(ulong interfaceId, ushort methodId, DynamicSerializerState args) { var call = SetupMessage(args, interfaceId, methodId); Debug.Assert(call.Target.which != MessageTarget.WHICH.undefined); diff --git a/Capnp.Net.Runtime/Rpc/RemoteResolvingCapability.cs b/Capnp.Net.Runtime/Rpc/RemoteResolvingCapability.cs index 65550f0..4c8c9fb 100644 --- a/Capnp.Net.Runtime/Rpc/RemoteResolvingCapability.cs +++ b/Capnp.Net.Runtime/Rpc/RemoteResolvingCapability.cs @@ -29,7 +29,7 @@ namespace Capnp.Rpc protected abstract void GetMessageTarget(MessageTarget.WRITER wr); - protected IPromisedAnswer CallOnResolution(ulong interfaceId, ushort methodId, DynamicSerializerState args, bool pipeline) + protected IPromisedAnswer CallOnResolution(ulong interfaceId, ushort methodId, DynamicSerializerState args) { try { @@ -62,7 +62,7 @@ namespace Capnp.Rpc #if DebugEmbargos Logger.LogDebug("Direct call"); #endif - return ResolvedCap.Call(interfaceId, methodId, args, pipeline); + return ResolvedCap.Call(interfaceId, methodId, args, default); } else { @@ -90,7 +90,7 @@ namespace Capnp.Rpc cancellationTokenSource.Token.ThrowIfCancellationRequested(); - return ResolvedCap.Call(interfaceId, methodId, args, pipeline); + return ResolvedCap.Call(interfaceId, methodId, args, default); }, TaskContinuationOptions.ExecuteSynchronously); diff --git a/Capnp.Net.Runtime/Rpc/Vine.cs b/Capnp.Net.Runtime/Rpc/Vine.cs index feb3bde..47bc10e 100644 --- a/Capnp.Net.Runtime/Rpc/Vine.cs +++ b/Capnp.Net.Runtime/Rpc/Vine.cs @@ -32,7 +32,7 @@ namespace Capnp.Rpc ulong interfaceId, ushort methodId, DeserializerState args, CancellationToken cancellationToken = default) { - var promisedAnswer = Proxy.Call(interfaceId, methodId, (DynamicSerializerState)args, false); + var promisedAnswer = Proxy.Call(interfaceId, methodId, (DynamicSerializerState)args, default); if (promisedAnswer is PendingQuestion pendingQuestion && pendingQuestion.RpcEndpoint == Impatient.AskingEndpoint) {