BST_APP_CEmailIMAP::BST_APP_CEmailIMAP( const EMAIL_ACCOUNT_STRU *penInAccountInfo ) : BST_APP_CEmailPacketProc( penInAccountInfo ) { m_usTag = BST_IMAP_START_TAG; m_lServerState = BST_EMAIL_UNCONNECT; m_pstrImapIDCmd = BST_LIB_StrCreat( BST_LIB_SHORT_STR_LEN ); BST_ASSERT_NORM( BST_NULL_PTR == m_pstrImapIDCmd ); m_pcServerResponse0 = (BST_UINT8 *)BST_OS_MALLOC( BST_IMAP_COLUMN_MAX ); if ( BST_NULL_PTR == m_pcServerResponse0 ) { BST_LIB_StrDelete( m_pstrImapIDCmd ); return; } m_pcServerResponse1 = (BST_UINT8 *)BST_OS_MALLOC( BST_IMAP_COLUMN_MAX ); if ( BST_NULL_PTR == m_pcServerResponse1 ) { BST_LIB_StrDelete( m_pstrImapIDCmd ); BST_OS_FREE( m_pcServerResponse0 ); return; } m_pcServerResponse2 = (BST_UINT8 *)BST_OS_MALLOC( BST_IMAP_COLUMN_MAX ); if ( BST_NULL_PTR == m_pcServerResponse2 ) { BST_LIB_StrDelete( m_pstrImapIDCmd ); BST_OS_FREE( m_pcServerResponse0 ); BST_OS_FREE( m_pcServerResponse1 ); return; } BST_OS_MEMSET( m_pcServerResponse0, 0, BST_IMAP_COLUMN_MAX ); BST_OS_MEMSET( m_pcServerResponse1, 0, BST_IMAP_COLUMN_MAX ); BST_OS_MEMSET( m_pcServerResponse2, 0, BST_IMAP_COLUMN_MAX ); }
BST_VOID BST_SRV_CHNL_ThreadEntry( BST_VOID *pvArg ) { BST_OS_MBX_T **pstMailBox; BST_OS_LOCKCNT_T tThreadLockCnt; BST_EVT_HEAD_STRU *pstEvent; BST_UINT32 ulRtnVal; if ( BST_NULL_PTR == pvArg ) { return; } /* * 线程参数初始化,包括邮箱,运行标识 */ tThreadLockCnt = BST_OS_ThreadLock (); pstMailBox = (BST_OS_MBX_T **)pvArg; *pstMailBox = BST_OS_CreateMbx ( BST_OS_GetCurrentThreadId(), BST_L_MBOX_SIZE ); if ( BST_NULL_PTR == *pstMailBox ) { BST_OS_ThreadUnLock ( tThreadLockCnt ); return; } BST_SetThreadInitFlag( BST_CHNL_CTRL_THREAD_FLAG ); g_lstChnlMng = BST_NULL_PTR; BST_OS_InitSpinLock( &g_HighPriCntSpinLock ); BST_OS_ThreadUnLock ( tThreadLockCnt ); /* * 进入线程主循环,等待邮件,邮件内容为即将执行的任务 */ for(;;) { ulRtnVal = BST_OS_RecvMail ( *pstMailBox, (BST_VOID **)&pstEvent, BST_OS_SYS_FOREVER ); BST_ASSERT_NORM( BST_OS_SYS_TIMEOUT == ulRtnVal ); BST_SRV_ProcChnlCtrEvent( pstEvent ); /*这里判断指针不为空再次释放,因此需要传递指针的指针*/ if( BST_NULL_PTR != pstEvent->pucData ) { BST_DBG_LOG1( "tiger BST_OS_FREE 8,", pstEvent->pucData ); BST_OS_FREE( pstEvent->pucData ); } BST_OS_FREE( pstEvent ); #if ( BST_VER_TYPE == BST_UT_VER ) break; #endif } }
BST_VOID BST_CTaskSchdler::AppThread ( BST_VOID* arg ) { BST_CORE_CPTask *pcTask; BST_OS_MBX_T **pstMailBox; BST_OS_LOCKCNT_T tThreadLockCnt; BST_UINT32 ulRtnVal; if ( BST_NULL_PTR == arg ) { return; } /* * 线程参数初始化,包括邮箱,运行标识 */ tThreadLockCnt = BST_OS_ThreadLock (); pstMailBox = (BST_OS_MBX_T **)arg; *pstMailBox = BST_OS_CreateMbx ( BST_OS_GetCurrentThreadId (), BST_MAX_APP_NUMBER ); BST_SetThreadInitFlag ( BST_APP_THREAD_FLAG << g_ucAppInitCnt ); g_ucAppInitCnt++; BST_OS_ThreadUnLock ( tThreadLockCnt ); /* * 进入线程主循环,等待邮件,邮件内容为即将执行的任务 */ for(;;) { ulRtnVal = BST_OS_RecvMail ( *pstMailBox, (BST_VOID **)&pcTask, BST_OS_SYS_FOREVER ); BST_ASSERT_NORM( BST_OS_SYS_TIMEOUT == ulRtnVal ); if ( BST_NULL_PTR == pcTask ) { continue; } if ( BST_FALSE == ChkTaskExist (pcTask) ) { continue; } if ( BST_TRUE == pcTask->IsBusy () ) { continue; } pcTask->PEntry (); } }
BST_VOID BST_SRV_CHNL_InitLink( BST_SRV_CHNL_LINK_STRU *pstChnlLink, BST_IP_CSocket *pcSocket, BST_OS_TIMERID_T ulTimerId ) { BST_ASSERT_NULL( pcSocket ); BST_ASSERT_NULL( pstChnlLink ); BST_ASSERT_NORM( BST_OS_INVALID_TIMER_ID == ulTimerId ); pstChnlLink->enState = BST_SRV_CHNL_STATE_UN_INITED; pstChnlLink->pNext = BST_NULL_PTR; pstChnlLink->pSentList = BST_NULL_PTR; pstChnlLink->pUnsendList = BST_NULL_PTR; pstChnlLink->stLink.ulMainLinkId = 0; pstChnlLink->stLink.ulAuxLinkId = 0; pstChnlLink->ulRetryTimes = 0; pstChnlLink->ulCurrentSeq = 0; pstChnlLink->ulIsPropSet = BST_FALSE; pstChnlLink->ulAddrType = BST_DSPP_FLG_ADDTYPE_VOID; pstChnlLink->ulTimerId = ulTimerId; pstChnlLink->pcSocket = pcSocket; }