From 56741e981dd404ea19a21b8a8121aed245154caf Mon Sep 17 00:00:00 2001 From: timyhac Date: Sat, 7 May 2022 10:12:45 +1000 Subject: [PATCH 1/3] Fixed example so it compiles --- src/Examples/CSharp NativeImport/CallbackEx.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Examples/CSharp NativeImport/CallbackEx.cs b/src/Examples/CSharp NativeImport/CallbackEx.cs index 20cd2ce4..e7d0f1cf 100644 --- a/src/Examples/CSharp NativeImport/CallbackEx.cs +++ b/src/Examples/CSharp NativeImport/CallbackEx.cs @@ -7,7 +7,12 @@ namespace NativeImport_Examples { public struct MyUserDataClass { - public int Value = 1234; + public int Value; + + public MyUserDataClass() + { + Value = 1234; + } } class CallbackEx From a729e9002fe89246b0e8d8751d049040ab8c939b Mon Sep 17 00:00:00 2001 From: timyhac Date: Sat, 7 May 2022 10:16:02 +1000 Subject: [PATCH 2/3] Check the result before completing InitializeAsync --- src/libplctag/NativeTagWrapper.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libplctag/NativeTagWrapper.cs b/src/libplctag/NativeTagWrapper.cs index 176eb907..9c4d33f4 100644 --- a/src/libplctag/NativeTagWrapper.cs +++ b/src/libplctag/NativeTagWrapper.cs @@ -344,6 +344,8 @@ public async Task InitializeAsync(CancellationToken token = default) if(GetStatus() == Status.Pending) await createTask.Task; + ThrowIfStatusNotOk(createTask.Task.Result); + _isInitialized = true; } } From 45c7eb9ecb4d3f03004228a13a887f90087d936a Mon Sep 17 00:00:00 2001 From: timyhac Date: Sat, 7 May 2022 10:16:27 +1000 Subject: [PATCH 3/3] Ensure that we complete the correct Task with the Timeout exception --- src/libplctag/NativeTagWrapper.cs | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/libplctag/NativeTagWrapper.cs b/src/libplctag/NativeTagWrapper.cs index 9c4d33f4..0444a79c 100644 --- a/src/libplctag/NativeTagWrapper.cs +++ b/src/libplctag/NativeTagWrapper.cs @@ -317,11 +317,11 @@ public async Task InitializeAsync(CancellationToken token = default) using (cts.Token.Register(() => { - Abort(); - RemoveEvents(); - if (createTasks.TryPop(out var createTask)) { + Abort(); + RemoveEvents(); + if (token.IsCancellationRequested) createTask.SetCanceled(); else @@ -374,10 +374,10 @@ public async Task ReadAsync(CancellationToken token = default) using (cts.Token.Register(() => { - Abort(); - if (readTasks.TryPop(out var readTask)) { + Abort(); + if (token.IsCancellationRequested) readTask.SetCanceled(); else @@ -417,10 +417,10 @@ public async Task WriteAsync(CancellationToken token = default) using (cts.Token.Register(() => { - Abort(); - if (writeTasks.TryPop(out var writeTask)) { + Abort(); + if (token.IsCancellationRequested) writeTask.SetCanceled(); else