[DTV00916638] p2p: Fix crash problem changing STA->AutoGO mode repeatedly

[Description]
Fix driver crash problem caused when changing STA mode and AutoGO mode
repeatedly. The crash callstack is as below.

(p2pFuncDfsSwitchCh+0x1d8/0x264) from (p2pRoleFsmRunEventChnlGrant
(p2pRoleFsmRunEventChnlGrant+0x260/0x3ac) from (mboxRcvAllMsg+0x228/0x2ac)
(mboxRcvAllMsg+0x228/0x2ac) from (wlanProcessMboxMessage+0x4c/0x68)
(wlanProcessMboxMessage+0x4c/0x68) from (kalProcessTxReq+0x30/0x294)
(kalProcessTxReq+0x30/0x294) from (main_thread+0x3b4/0x4dc)
(main_thread+0x3b4/0x4dc) from (kthread+0xa0/0xac)

Change-Id: I82b03605223d28ad74653126d58a06597d5403db
Signed-off-by: Sarick Jiang <sarick.jiang@mediatek.com>
CR-Id: DTV00916638
Feature: p2p
Reviewed-on: http://gerrit.mediatek.inc:8080/1241100
CheckPatch: Check Patch <srv_checkpatch@mediatek.com>
Reviewed-by: Sho Masuda <sho.masuda@mediatek.com>
(cherry picked from commit 505503d96d009a8a1ccc83631c3131e456f4de50)
Reviewed-on: http://gerrit.mediatek.inc:8080/1267387
Reviewed-by: George Kuo <george.kuo@mediatek.com>
Reviewed-by: Boforn Lin <boforn.lin@mediatek.com>
Reviewed-by: Wayne Guo <wayne.guo@mediatek.com>
Build: srv_neptune_adm <srv_neptune_adm@mediatek.com>
diff --git a/mgmt/p2p_func.c b/mgmt/p2p_func.c
index 2ef6644..e58c793 100644
--- a/mgmt/p2p_func.c
+++ b/mgmt/p2p_func.c
@@ -1209,18 +1209,18 @@
 					prGlueInfo->prP2PInfo[prP2pRoleFsmInfo->ucRoleIndex]->chandef);
 	DBGLOG(P2P, INFO, "p2pFuncDfsSwitchCh: Update to OS Done\n");
 
-	if (prGlueInfo->prP2PInfo[prP2pRoleFsmInfo->ucRoleIndex]->chandef->chan)
-		cnmMemFree(prGlueInfo->prAdapter,
-			prGlueInfo->prP2PInfo[prP2pRoleFsmInfo->ucRoleIndex]->chandef->chan);
+	if (prGlueInfo->prP2PInfo[prP2pRoleFsmInfo->ucRoleIndex]->chandef) {
+		if (prGlueInfo->prP2PInfo[prP2pRoleFsmInfo->ucRoleIndex]->chandef->chan) {
+			cnmMemFree(prGlueInfo->prAdapter,
+				prGlueInfo->prP2PInfo[prP2pRoleFsmInfo->ucRoleIndex]->chandef->chan);
+			prGlueInfo->prP2PInfo[prP2pRoleFsmInfo->ucRoleIndex]->chandef->chan = NULL;
+		}
 
-	prGlueInfo->prP2PInfo[prP2pRoleFsmInfo->ucRoleIndex]->chandef->chan = NULL;
-
-	if (prGlueInfo->prP2PInfo[prP2pRoleFsmInfo->ucRoleIndex]->chandef)
 		cnmMemFree(prGlueInfo->prAdapter,
 			prGlueInfo->prP2PInfo[prP2pRoleFsmInfo->ucRoleIndex]->chandef);
-
-	prGlueInfo->prP2PInfo[prP2pRoleFsmInfo->ucRoleIndex]->chandef = NULL;
-}				/* p2pFuncDfsSwitchCh */
+		prGlueInfo->prP2PInfo[prP2pRoleFsmInfo->ucRoleIndex]->chandef = NULL;
+	}
+} /* p2pFuncDfsSwitchCh */
 
 BOOLEAN p2pFuncCheckWeatherRadarBand(IN P_P2P_CHNL_REQ_INFO_T prChnlReqInfo)
 {