From 39602e76af6c135cacf07e2c92db2facef930701 Mon Sep 17 00:00:00 2001 From: Jay Cho Date: Sun, 26 Jul 2026 20:02:50 +0900 Subject: [PATCH 1/2] Refactor: Fault NfcTag transceive/read tasks on native error and drop double dictionary lookup (Fixes #7675) --- .../Tizen.Network.Nfc/NfcTag.cs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/Tizen.Network.Nfc/Tizen.Network.Nfc/NfcTag.cs b/src/Tizen.Network.Nfc/Tizen.Network.Nfc/NfcTag.cs index 50887741e0c..247e42a87d9 100644 --- a/src/Tizen.Network.Nfc/Tizen.Network.Nfc/NfcTag.cs +++ b/src/Tizen.Network.Nfc/Tizen.Network.Nfc/NfcTag.cs @@ -324,13 +324,17 @@ public Task FormatNdefMessageAsync(byte[] keyValue) void TransceiveCompletedCallback(int result, IntPtr resultData, int dataSize, IntPtr userData) { int requestId = (int)userData; - if (_transceiveTaskSource.ContainsKey(requestId)) + if (_transceiveTaskSource.TryGetValue(requestId, out var taskSource)) { if (result == (int)NfcError.None) { byte[] resultBuffer = new byte[dataSize]; Marshal.Copy(resultData, resultBuffer, 0, dataSize); - _transceiveTaskSource[requestId].TrySetResult(resultBuffer); + taskSource.TrySetResult(resultBuffer); + } + else + { + taskSource.TrySetException(new InvalidOperationException(((NfcError)result).ToString())); } _transceiveTaskSource.Remove(requestId); } @@ -351,14 +355,18 @@ bool ReadNdefCallback(int result, IntPtr ndefMessage, IntPtr userData) { bool ret = false; int requestId = (int)userData; - if (_readNdefTaskSource.ContainsKey(requestId)) + if (_readNdefTaskSource.TryGetValue(requestId, out var taskSource)) { if (result == (int)NfcError.None) { var ndefMsg = new NfcNdefMessage(ndefMessage); - _readNdefTaskSource[requestId].TrySetResult(ndefMsg); + taskSource.TrySetResult(ndefMsg); ret = true; } + else + { + taskSource.TrySetException(new InvalidOperationException(((NfcError)result).ToString())); + } _readNdefTaskSource.Remove(requestId); } return ret; From efeb1a13784176cb67b41879382f70f10def3e1c Mon Sep 17 00:00:00 2001 From: Jay Cho Date: Mon, 27 Jul 2026 21:02:38 +0900 Subject: [PATCH 2/2] Address review feedback Route native errors through NfcErrorFactory in TransceiveCompletedCallback and ReadNdefCallback to keep faulted exception types consistent with the documented contract and restore Log.Error parity Applied-AI-Comments: 3653647061,3653647146 --- .../Tizen.Network.Nfc/NfcTag.cs | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Tizen.Network.Nfc/Tizen.Network.Nfc/NfcTag.cs b/src/Tizen.Network.Nfc/Tizen.Network.Nfc/NfcTag.cs index 247e42a87d9..0ebfdd8a129 100644 --- a/src/Tizen.Network.Nfc/Tizen.Network.Nfc/NfcTag.cs +++ b/src/Tizen.Network.Nfc/Tizen.Network.Nfc/NfcTag.cs @@ -334,7 +334,15 @@ void TransceiveCompletedCallback(int result, IntPtr resultData, int dataSize, In } else { - taskSource.TrySetException(new InvalidOperationException(((NfcError)result).ToString())); + Log.Error(Globals.LogTag, $"Failed to transceive data, Error - {(NfcError)result}"); + try + { + NfcErrorFactory.ThrowNfcException(result); + } + catch (Exception e) + { + taskSource.TrySetException(e); + } } _transceiveTaskSource.Remove(requestId); } @@ -365,7 +373,15 @@ bool ReadNdefCallback(int result, IntPtr ndefMessage, IntPtr userData) } else { - taskSource.TrySetException(new InvalidOperationException(((NfcError)result).ToString())); + Log.Error(Globals.LogTag, $"Failed to read ndef message, Error - {(NfcError)result}"); + try + { + NfcErrorFactory.ThrowNfcException(result); + } + catch (Exception e) + { + taskSource.TrySetException(e); + } } _readNdefTaskSource.Remove(requestId); }