Hi ,
I`m debugging on a VIP locked up issue.
In my usecase, I need to restart vip on some condition. when the VIP restart , it follow this sequence :
vip0 stop-> vip0 delete-> vip0 creat -> vip0 start->vip1 stop-> vip1 delete-> vip1 creat -> vip1 start .
Sometime vip0 start failed because fullQ is full and it is waiting for the semaphore (handle->semWr) forever :
here is the trace of code :
/* list processing task */
-> Vps_captTskListUpdate
-> Vps_captTskUpdateList();
-> Vps_CaptTskPutCaptField(pObj, pChObj, &parseDescInfo);
-> VpsUtils_quePut(&pObj->fullQue[Vps_captGetStreamId(parseDescInfo->lChannel)],
pFrame,
BIOS_WAIT_FOREVER);
it run into the else branch which mean the fullQ is full :
if ( handle->count < handle->maxElements )
{
... ...
}
else
{
/*
* que is full
*/
/*
* restore interrupts
*/
Hwi_restore ( cookie );
if ( timeout == BIOS_NO_WAIT )
break; /* non-blocking function call, exit with error */
if ( handle->flags & VPSUTILS_QUE_FLAG_BLOCK_QUE_PUT )
{
/*
* blocking on que put enabled
*/
/*
* take semaphore and block until timeout occurs or
* semaphore is posted
*/
if ( !Semaphore_pend ( handle->semWr, timeout ) )
break; /* timeout happend, exit with error */
...
}
it is hang here, so that it won`t unlock CLM in Vps_captTskListUpdate().
this issue seems only happen when VIP is captureing 1080P video.
I don`t understand why the fullQ is full when VIP0 start .I did stop and delete the VIP0 before re-creat and start it ?
Is it correct that I stop-delete-creat-start the vip instance one by one ?