Erase callback when function returns immediately.

This should avoid calling a irrelevant callback at abort.

Change-Id: Ied8d54268613f248fd505d4b25d0ab8a0905a336
diff --git a/src/phFriNfc_LlcpTransport_Connection.c b/src/phFriNfc_LlcpTransport_Connection.c
index 95b5527..fff63b4 100644
--- a/src/phFriNfc_LlcpTransport_Connection.c
+++ b/src/phFriNfc_LlcpTransport_Connection.c
@@ -2081,11 +2081,11 @@
       {
          /* Call the CB */
          status = PHNFCSTVAL(CID_FRI_NFC_LLCP_TRANSPORT, NFCSTATUS_FAILED);
-         return status;
+         goto clean_and_return;
       }
    }
 
-   /* Recive Window */
+   /* Receive Window */
    if(pLlcpSocket->sSocketOption.rw != PHFRINFC_LLCP_RW_DEFAULT)
    {
       /* Encode RW value */
@@ -2101,7 +2101,7 @@
       {
          /* Call the CB */
          status = PHNFCSTVAL(CID_FRI_NFC_LLCP_TRANSPORT, NFCSTATUS_FAILED);
-         return status;
+         goto clean_and_return;
       }
    }
 
@@ -2143,6 +2143,15 @@
                                    phFriNfc_LlcpTransport_ConnectionOriented_SendLlcp_CB,
                                    pLlcpSocket->psTransport);
    }
+
+clean_and_return:
+   if(status != NFCSTATUS_PENDING)
+   {
+      LLCP_PRINT("Release Accept callback");
+      pLlcpSocket->pfSocketAccept_Cb = NULL;
+      pLlcpSocket->pAcceptContext = NULL;
+   }
+
    return status;
 }
 
@@ -2257,11 +2266,12 @@
                                         miux);
       if(status != NFCSTATUS_SUCCESS)
       {
-         return status = PHNFCSTVAL(CID_FRI_NFC_LLCP_TRANSPORT, NFCSTATUS_FAILED);
+         status = PHNFCSTVAL(CID_FRI_NFC_LLCP_TRANSPORT, NFCSTATUS_FAILED);
+         goto clean_and_return;
       }
    }
 
-   /* Recive Window */
+   /* Receive Window */
    if(pLlcpSocket->sSocketOption.rw != PHFRINFC_LLCP_RW_DEFAULT)
    {
       /* Encode RW value */
@@ -2276,6 +2286,7 @@
       if(status != NFCSTATUS_SUCCESS)
       {
          status = PHNFCSTVAL(CID_FRI_NFC_LLCP_TRANSPORT, NFCSTATUS_FAILED);
+         goto clean_and_return;
       }
    }
 
@@ -2291,10 +2302,11 @@
       if(status != NFCSTATUS_SUCCESS)
       {
          status = PHNFCSTVAL(CID_FRI_NFC_LLCP_TRANSPORT, NFCSTATUS_FAILED);
+         goto clean_and_return;
       }
    }
 
-      /* Test if a send is pending */
+   /* Test if a send is pending */
    if(pLlcpSocket->psTransport->bSendPending == TRUE)
    {
       pLlcpSocket->bSocketConnectPending =  TRUE;
@@ -2326,6 +2338,14 @@
                                    pLlcpSocket->psTransport);
    }
 
+clean_and_return:
+   if(status != NFCSTATUS_PENDING)
+   {
+      LLCP_PRINT("Release Connect callback");
+      pLlcpSocket->pfSocketConnect_Cb = NULL;
+      pLlcpSocket->pConnectContext = NULL;
+   }
+
    return status;
 }
 
@@ -2423,7 +2443,14 @@
                                    NULL,
                                    phFriNfc_LlcpTransport_ConnectionOriented_SendLlcp_CB,
                                    pLlcpSocket->psTransport);
+      if(status != NFCSTATUS_PENDING)
+      {
+         LLCP_PRINT("Release Disconnect callback");
+         pLlcpSocket->pfSocketConnect_Cb = NULL;
+         pLlcpSocket->pConnectContext = NULL;
+      }
    }
+
    return status;
 }
 
@@ -2621,6 +2648,12 @@
                                       psBuffer,
                                       phFriNfc_LlcpTransport_ConnectionOriented_SendLlcp_CB,
                                       pLlcpSocket->psTransport);
+         if(status != NFCSTATUS_PENDING)
+         {
+            LLCP_PRINT("Release Send callback");
+            pLlcpSocket->pfSocketSend_Cb = NULL;
+            pLlcpSocket->pSendContext = NULL;
+         }
 
          /* Update VS */
          pLlcpSocket->socket_VS = (pLlcpSocket->socket_VS+1)%16;
@@ -2827,6 +2860,14 @@
       }
    }
 
+   if(status != NFCSTATUS_PENDING)
+   {
+      /* Note: The receive callback must be released to avoid being called at abort */
+      LLCP_PRINT("Release Receive callback");
+      pLlcpSocket->pfSocketRecv_Cb = NULL;
+      pLlcpSocket->pRecvContext = NULL;
+   }
+
    return status;
 }