Fix wrong callback being cleared.
When a call to disconnect() failed, the
connect() callback was cleared, not the
disconnect() one. This would cause deadlocks,
where JNI threads were forever blocked on
doConnect().
Bug: 7324226
Change-Id: I784c8d700c87d643315f2417610ca75ef8f9aa7c
diff --git a/src/phFriNfc_LlcpTransport.c b/src/phFriNfc_LlcpTransport.c
index b3aee54..447eae6 100644
--- a/src/phFriNfc_LlcpTransport.c
+++ b/src/phFriNfc_LlcpTransport.c
@@ -687,7 +687,7 @@
pLlcpTransport->pSocketTable[i].pAcceptContext = NULL;
pLlcpTransport->pSocketTable[i].pRejectContext = NULL;
pLlcpTransport->pSocketTable[i].pConnectContext = NULL;
- pLlcpTransport->pSocketTable[i].pDisonnectContext = NULL;
+ pLlcpTransport->pSocketTable[i].pDisconnectContext = NULL;
pLlcpTransport->pSocketTable[i].pSendContext = NULL;
pLlcpTransport->pSocketTable[i].pRecvContext = NULL;
pLlcpTransport->pSocketTable[i].pSocketErrCb = NULL;
diff --git a/src/phFriNfc_LlcpTransport.h b/src/phFriNfc_LlcpTransport.h
index 2bb0eac..2f83439 100644
--- a/src/phFriNfc_LlcpTransport.h
+++ b/src/phFriNfc_LlcpTransport.h
@@ -225,7 +225,7 @@
void *pAcceptContext;
void *pRejectContext;
void *pConnectContext;
- void *pDisonnectContext;
+ void *pDisconnectContext;
void *pSendContext;
void *pRecvContext;
void *pContext;
diff --git a/src/phFriNfc_LlcpTransport_Connection.c b/src/phFriNfc_LlcpTransport_Connection.c
index d23398f..4f7badf 100644
--- a/src/phFriNfc_LlcpTransport_Connection.c
+++ b/src/phFriNfc_LlcpTransport_Connection.c
@@ -296,10 +296,10 @@
pLlcpSocket->pConnectContext = NULL;
if (pLlcpSocket->pfSocketDisconnect_Cb != NULL)
{
- pLlcpSocket->pfSocketDisconnect_Cb(pLlcpSocket->pDisonnectContext, NFCSTATUS_ABORTED);
+ pLlcpSocket->pfSocketDisconnect_Cb(pLlcpSocket->pDisconnectContext, NFCSTATUS_ABORTED);
pLlcpSocket->pfSocketDisconnect_Cb = NULL;
}
- pLlcpSocket->pDisonnectContext = NULL;
+ pLlcpSocket->pDisconnectContext = NULL;
pLlcpSocket->pfSocketRecvFrom_Cb = NULL;
pLlcpSocket->pfSocketListen_Cb = NULL;
@@ -866,7 +866,7 @@
/* Call Disconnect CB */
if (psLocalLlcpSocket->pfSocketDisconnect_Cb != NULL)
{
- psLocalLlcpSocket->pfSocketDisconnect_Cb(psLocalLlcpSocket->pDisonnectContext,NFCSTATUS_SUCCESS);
+ psLocalLlcpSocket->pfSocketDisconnect_Cb(psLocalLlcpSocket->pDisconnectContext,NFCSTATUS_SUCCESS);
psLocalLlcpSocket->pfSocketDisconnect_Cb = NULL;
}
@@ -2016,7 +2016,7 @@
/* Store the Disconnect callback and context*/
pLlcpSocket->pfSocketDisconnect_Cb = pDisconnect_RspCb;
- pLlcpSocket->pDisonnectContext = pContext;
+ pLlcpSocket->pDisconnectContext = pContext;
/* Set the socket in connecting state */
pLlcpSocket->eSocket_State = phFriNfc_LlcpTransportSocket_eSocketDisconnecting;
@@ -2077,8 +2077,8 @@
{
clearSendPending(pLlcpSocket->psTransport);
LLCP_PRINT("Release Disconnect callback");
- pLlcpSocket->pfSocketConnect_Cb = NULL;
- pLlcpSocket->pConnectContext = NULL;
+ pLlcpSocket->pfSocketDisconnect_Cb = NULL;
+ pLlcpSocket->pDisconnectContext = NULL;
}
}
diff --git a/src/phFriNfc_LlcpTransport_Connectionless.c b/src/phFriNfc_LlcpTransport_Connectionless.c
index 99f01bc..4b084a8 100644
--- a/src/phFriNfc_LlcpTransport_Connectionless.c
+++ b/src/phFriNfc_LlcpTransport_Connectionless.c
@@ -164,7 +164,7 @@
pLlcpSocket->pfSocketListen_Cb = NULL;
pLlcpSocket->pConnectContext = NULL;
pLlcpSocket->pfSocketConnect_Cb = NULL;
- pLlcpSocket->pDisonnectContext = NULL;
+ pLlcpSocket->pDisconnectContext = NULL;
pLlcpSocket->pfSocketDisconnect_Cb = NULL;
}