Ejemplo n.º 1
0
bool VideoDecoderThread::work() 
{
    if (m_pDecoder->isEOF(SS_VIDEO)) {
        if (!m_pDecoder->getVideoInfo().m_bHasAudio) {
            m_pDecoder->seek(0);
        } else {
            // TODO: Replace this with waitForMessage()
            msleep(10);
        }
    } else {
        ScopeTimer timer(DecoderProfilingZone);
        vdpau_render_state* pRenderState = 0;
        FrameAvailableCode frameAvailable;
        vector<BitmapPtr> pBmps;
        bool usesVDPAU = m_pDecoder->getVideoInfo().m_bUsesVDPAU;
        if (usesVDPAU) {
#ifdef AVG_ENABLE_VDPAU
            frameAvailable = m_pDecoder->renderToVDPAU(&pRenderState);
#else
            frameAvailable = FA_NEW_FRAME; // Never executed - silences compiler warning.
#endif
        } else {
            IntPoint size = m_pDecoder->getSize();
            IntPoint halfSize(size.x/2, size.y/2);
            PixelFormat pf = m_pDecoder->getPixelFormat();
            if (pixelFormatIsPlanar(pf)) {
                pBmps.push_back(getBmp(m_pBmpQ, size, I8));
                pBmps.push_back(getBmp(m_pHalfBmpQ, halfSize, I8));
                pBmps.push_back(getBmp(m_pHalfBmpQ, halfSize, I8));
                if (pf == YCbCrA420p) {
                    pBmps.push_back(getBmp(m_pBmpQ, size, I8));
                }
            } else {
                pBmps.push_back(getBmp(m_pBmpQ, size, pf));
            }
            frameAvailable = m_pDecoder->renderToBmps(pBmps, -1);
        }
        if (m_pDecoder->isEOF(SS_VIDEO)) {
            VideoMsgPtr pMsg(new VideoMsg());
            pMsg->setEOF();
            m_MsgQ.push(pMsg);
        } else {
            ScopeTimer timer(PushMsgProfilingZone);
            AVG_ASSERT(frameAvailable == FA_NEW_FRAME);
            VideoMsgPtr pMsg(new VideoMsg());
            if (usesVDPAU) {
                pMsg->setVDPAUFrame(pRenderState, m_pDecoder->getCurTime(SS_VIDEO));
            } else {
                pMsg->setFrame(pBmps, m_pDecoder->getCurTime(SS_VIDEO));
            }
            m_MsgQ.push(pMsg);
            msleep(0);
        }
        ThreadProfiler::get()->reset();
    }
    return true;
}
Ejemplo n.º 2
0
Archivo: main.c Proyecto: 1587/ltp
test_ll_t *run()
{
	test_ll_t *newTest = NULL, *lastTest = NULL;

	if (cleanArgs.flags & CLD_FLG_FSLIST) {
		char *filespec = cleanArgs.device;
		char *aFilespec = NULL;
		FILE *file = NULL;

		if ((aFilespec = (char *)ALLOC(80)) == NULL) {
			pMsg(ERR, &cleanArgs,
			     "Could not allocate memory to read file");
			return newTest;
		}

		file = fopen(filespec, "r");
		if (file == NULL) {
			pMsg(ERR,
			     &cleanArgs,
			     "%s is not a regular file, could not be opened for reading, or was not found.",
			     filespec);
			FREE(aFilespec);

			return newTest;
		}

		while (!feof(file)) {
			memset(aFilespec, 0, 80);
			fscanf(file, "%79s", aFilespec);
			if (aFilespec[0] != 0) {	/* if we read something useful */
				lastTest = newTest;
				newTest = getNewTest(lastTest);
				if (newTest != lastTest) {
					memset(newTest->args->device, 0,
					       DEV_NAME_LEN);
					strncpy(newTest->args->device,
						aFilespec, strlen(aFilespec));
					createChild(threadedMain, newTest);
				} else {
					newTest = lastTest;
					break;
				}
			}
		}

		fclose(file);
		FREE(aFilespec);
	} else {
		newTest = getNewTest(newTest);
		if (newTest != NULL) {
			createChild(threadedMain, newTest);
		}
	}

	return newTest;
}
Ejemplo n.º 3
0
void ChatHistory::insertHistoryLine(const QString& originator, const QDateTime timestamp, const QString& message)
{
	c4_Row row;
	c4_StringProp pOriginator("originator");
	c4_StringProp pMsg("msg");

	pOriginator(row) = originator.toUtf8().constData();
	pMsg(row) = message.toUtf8().constData();

	view->Add(row);
}
Ejemplo n.º 4
0
///////////////////////////////////////////////////////////////////////////////
///@author      Costin Grigorescu
///@brief       Forward DAO to EntryPoint
///@param       [in] p_nDataFieldDescriptor - Data field descriptor
///@param       [in] p_pPayload - DAO message
///@param       [in] p_nPayloadLength - DAO message len
///@retval		0 - failed to send
///@retval		1 - success
///////////////////////////////////////////////////////////////////////////////
void CRplRootApp::AddDAORelayEncap(MgmtProtocol::CMgmtPMessage::MsgDAORelayData::DataFieldDescriptorType p_nDataFieldDescriptor,
	const uint8_t* p_pPayload,
	uint16_t p_nPayloadLength){

    MgmtProtocol::CMgmtPMessage::Ptr pMsg(new MgmtProtocol::CMgmtPMessage);

    //init header
    pMsg->m_Header.SetMsgType(MgmtProtocol::CMgmtPMessage::DAO_RELAY);
    pMsg->m_Header.m_u32SeqNo = m_pMgmtClientLink->m_oSeqNoGenerator.GetNextMsgId ( );

	MgmtProtocol::CMgmtPMessage::MsgDAORelayData oMsgDAORelayData;
	// set far id
	oMsgDAORelayData.m_pu8_FAR_ID = GetFarId();
	// set data field descriptor
	oMsgDAORelayData.m_u8_DataFieldDescriptor = p_nDataFieldDescriptor;
	// set DIO MOP
    oMsgDAORelayData.m_u8_DIO_MOP = GET_MOP( &g_oRplInstance.m_oRplConfig );
	// set lifetime_unit
	oMsgDAORelayData.m_u16_DIOLifetimeUnit =  m_stCfg.m_oMapConfig.m_oRplProfile.m_nDefRouteLifetimeUnit;
	// set DAO message
	oMsgDAORelayData.m_pu8_DAOData = p_pPayload;
	oMsgDAORelayData.m_u32_DAODataLen = p_nPayloadLength;

	NLOG_INFO( "Encap+ DAO_RELAY: far=%s, dfd=%d, dao_len=%d",
			 GetHex( oMsgDAORelayData.m_pu8_FAR_ID, oMsgDAORelayData.m_st_u8_FAR_ID_Len ),
			 oMsgDAORelayData.m_u8_DataFieldDescriptor,
			 oMsgDAORelayData.m_u32_DAODataLen );

	NLOG_DBG( "\tdao=%s", GetHex( oMsgDAORelayData.m_pu8_DAOData, oMsgDAORelayData.m_u32_DAODataLen ) );

    pMsg->SetData(&oMsgDAORelayData);

	m_shpoCnsDaoMsg->OptionAddEncap(pMsg.get());
 }
Ejemplo n.º 5
0
Archivo: dump.c Proyecto: AbhiramiP/ltp
int do_dump(child_args_t * args)
{
	ssize_t NumBytes = 0;
	OFF_T TargetLBA, TotalBytes = 0;
	char *buff;
	fd_t fd;

	if ((buff = (char *)ALLOC(args->htrsiz * BLK_SIZE)) == NULL) {
		fprintf(stderr, "Can't allocate buffer\n");
		return (-1);
	}

	memset(buff, 0, args->htrsiz * BLK_SIZE);

	fd = Open(args->device, args->flags | CLD_FLG_R);
	if (INVALID_FD(fd)) {
		pMsg(ERR, args, "could not open %s.\n", args->device);
		pMsg(ERR, args, "%s: Error = %u\n", args->device,
		     GETLASTERROR());
		return (-1);
	}

	TargetLBA = Seek(fd, args->start_lba * BLK_SIZE);
	if (TargetLBA != (args->start_lba * (OFF_T) BLK_SIZE)) {
		pMsg(ERR, args, "Could not seek to start position.\n");
		CLOSE(fd);
		return (-1);
	}

	do {
		NumBytes = Read(fd, buff, args->htrsiz * BLK_SIZE);
		if ((NumBytes > args->htrsiz * BLK_SIZE) || (NumBytes < 0)) {
			pMsg(ERR, args, "Failure reading %s\n", args->device);
			pMsg(ERR, args, "Last Error was %lu\n", GETLASTERROR());
			break;
		}
		dump_data(stdout, buff, NumBytes, 16, 0, FMT_STR);
		TotalBytes += (OFF_T) NumBytes;
	} while ((TotalBytes < (args->htrsiz * BLK_SIZE)) && (NumBytes > 0));

	FREE(buff);
	CLOSE(fd);

	return 0;
}
Ejemplo n.º 6
0
int generateElementsN(element ***e){
    int i,j,k;
    for(i=0;i<nTotalElements;i++){
        if(setParamsN((*e)[i])<0){
            pMsg("erro ao gerar os elementos");
        }
    }
    return(0);
}
Ejemplo n.º 7
0
void    sendPingMsg(ffnet::udp_point * point, const ffnet::udp_endpoint & tp)
{
    boost::shared_ptr<PingPong::Ping> pMsg(new PingPong::Ping());
    pMsg->set_msg("ping from client");
    pMsg->set_id(1);
    ffnet::send_message(point, tp, pMsg);

    std::cout<<"send a message, service running..."<<std::endl;
}
Ejemplo n.º 8
0
Archivo: main.c Proyecto: 1587/ltp
int main(int argc, char **argv)
{
	extern time_t global_start_time;
	extern unsigned long glb_flags;	/* global flags GLB_FLG_xxx */
	int i;

#ifdef WINDOWS
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;

	wVersionRequested = MAKEWORD(2, 2);

	err = WSAStartup(wVersionRequested, &wsaData);
	if (err != 0) {
		pMsg(WARN, &cleanArgs,
		     "Windows setup of Winsock failed, can't retrieve host name, continuing");
	}
#endif

	setup_sig_mask();

	memset(hostname, 0, HOSTNAME_SIZE);
	gethostname(hostname, HOSTNAME_SIZE);

	setbuf(stdout, NULL);

	glb_flags = 0;
	global_start_time = time(NULL);

	strncpy(cleanArgs.device, "No filespec", strlen("No filespec"));
	cleanArgs.stop_lba = -1;
	cleanArgs.stop_blk = -1;
	cleanArgs.ioTimeout = DEFAULT_IO_TIMEOUT;
	cleanArgs.flags |= CLD_FLG_ALLDIE;
	cleanArgs.flags |= CLD_FLG_ERR_REREAD;
	cleanArgs.flags |= CLD_FLG_LBA_SYNC;

	for (i = 1; i < argc - 1; i++) {
		strncat(cleanArgs.argstr, argv[i],
			(MAX_ARG_LEN - 1) - strlen(cleanArgs.argstr));
		strncat(cleanArgs.argstr, " ",
			(MAX_ARG_LEN - 1) - strlen(cleanArgs.argstr));
	}

	if (fill_cld_args(argc, argv, &cleanArgs) < 0)
		exit(1);

	cleanUp(run());

#ifdef WINDOWS
	WSACleanup();
#endif

	return 0;
}
Ejemplo n.º 9
0
void    sendPingMsg(ffnet::EndpointPtr_t tp)
{
    boost::shared_ptr<PingPong::Ping> pMsg(new PingPong::Ping());
    pMsg->set_msg("ping from client");
    pMsg->set_id(1);

    ffnet::NetNervure::send(pMsg, tp);

    std::cout<<"service running..."<<std::endl;
}
Ejemplo n.º 10
0
void createChild(void *function, test_ll_t *test) {
	hThread_t hTmpThread;

	hTmpThread = spawnThread(function, test);

	if (ISTHREADVALID(hTmpThread)) {
		test->hThread = hTmpThread;
	} else {
		pMsg(ERR, test->args, "%d : Could not create child thread...\n", GETLASTERROR());
		exit(GETLASTERROR());
	}
}
Ejemplo n.º 11
0
void VideoDecoderThread::handleEOF()
{
    bool bGotPicture = m_pFrameDecoder->decodeLastFrame(m_pFrame);
    if (bGotPicture) {
        sendFrame(m_pFrame);
    } else {
        m_bProcessingLastFrames = false;
        VideoMsgPtr pMsg(new VideoMsg());
        pMsg->setEOF();
        pushMsg(pMsg);
    }
}
Ejemplo n.º 12
0
void VideoDemuxerThread::close()
{
    map<int, VideoMsgQueuePtr>::iterator it;
    for (it = m_PacketQs.begin(); it != m_PacketQs.end(); it++) {
        VideoMsgQueuePtr pPacketQ = it->second;
        clearQueue(pPacketQ);

        VideoMsgPtr pMsg(new VideoMsg);
        pMsg->setClosed();
        pPacketQ->push(pMsg);
        m_PacketQEOFMap[it->first] = false;
    }
    stop();
}
Ejemplo n.º 13
0
/*
 * This function will create children for us based on the action specified
 * during the call.  if we cannot create a child, we fail and exit with
 * errno as the exit status.
 */
void CreateTestChild(void *function, test_ll_t *test)
{
	thread_struct_t *pNewThread;
	hThread_t hTmpThread;

	hTmpThread = spawnThread(function, test);

	if (ISTHREADVALID(hTmpThread)) {
		if ((pNewThread = (thread_struct_t *) ALLOC(sizeof(thread_struct_t))) == NULL) {
			pMsg(ERR, test->args, "%d : Could not allocate memory for child thread...\n", GETLASTERROR());
			exit(GETLASTERROR());
		}
		test->env->kids++;
		memset(pNewThread, 0, sizeof(thread_struct_t));
		pNewThread->next = test->env->pThreads;
		test->env->pThreads = pNewThread;
		test->env->pThreads->hThread = hTmpThread;
	} else {
		pMsg(ERR, test->args, "%d : Could not create all child threads.\n", GETLASTERROR());
		pMsg(INFO, test->args, "Total Number of Threads created was %u\n", test->env->kids);
		exit(GETLASTERROR());
	}
}
Ejemplo n.º 14
0
void normalize_percs(child_args_t *args)
{
	int i, j;

	if ((args->flags & CLD_FLG_R) && !(args->flags & CLD_FLG_W)) {
		if ((args->flags & CLD_FLG_DUTY) && (args->rperc < 100)) {
			pMsg(WARN, args, "Read specified w/o write, ignoring -D, forcing read only...\n");
		}
		args->rperc = 100;
		args->wperc = 0;
	} else if ((args->flags & CLD_FLG_W) && !(args->flags & CLD_FLG_R)) {
		if ((args->flags & CLD_FLG_DUTY) && (args->wperc < 100)) {
			pMsg(WARN, args, "Write specified w/o read, ignoring -D, forcing write only...\n");
		}
		args->rperc = 0;
		args->wperc = 100;
	} else { /* must be reading and writing */
		if (args->rperc == 0 && args->wperc == 0) {
			args->rperc = 50;
			args->wperc = 50;
		} else if (args->rperc == 0) {
			args->rperc = 100 - args->wperc;
		} else if (args->wperc == 0) {
			args->wperc = 100 - args->rperc;
		}
	}

	if (args->rperc + args->wperc != 100) {
		pMsg(INFO, args, "Balancing percentage between reads and writes\n");
		if ((args->flags & CLD_FLG_R) && (args->flags & CLD_FLG_W)) {
			i = 100 - (args->rperc + args->wperc);
			j = i / 2;
			args->wperc += j;
			args->rperc += (i - j);
		}
	}
}
Ejemplo n.º 15
0
void CRplRootApp::AddTopologyNotificationEncap(MgmtProtocol::CMgmtPMessage::EventType p_enumEventType,
	const uint8_t* p_pu8NodeId, const TIpv6Prefix& p_rNodePrefix, MgmtProtocol::DeviceType p_enumNodeType,
	const uint8_t* p_pu8ParentId, MgmtProtocol::DeviceType p_enumParentType)
{
	if (!m_stCfg.m_nTopologyMgmtMsgsEnabled)
	{	return;
	}

    MgmtProtocol::CMgmtPMessage::Ptr pMsg(new MgmtProtocol::CMgmtPMessage);

    //init header
    pMsg->m_Header.SetMsgType(MgmtProtocol::CMgmtPMessage::TOPOLOGY_NOTIFICATION);
    pMsg->m_Header.m_u32SeqNo = m_pMgmtClientLink->m_oSeqNoGenerator.GetNextMsgId ( );

    //init data
    MgmtProtocol::CMgmtPMessage::MsgTopologyNotifData oData;
    memset(&oData, 0, sizeof(oData));

    oData.m_u8NotifType = (uint8_t) p_enumEventType;

	if (p_pu8NodeId)
	{
		memcpy (oData.m_au8DeviceId,p_pu8NodeId,IPv6_HOST_ID_LEN);
	}
	else
	{
		memcpy(oData.m_au8DeviceId,
			p_rNodePrefix.m_oIPv6Addr.m_pucBytes + PrefixLenInBytes(p_rNodePrefix.m_u8PrefixLen) - IPV6_DEVID_LEN,
			IPV6_DEVID_LEN);
	}

    oData.m_u8DeviceType = p_enumNodeType;

    memcpy (oData.m_au8DeviceAddrIPv6, p_rNodePrefix.m_oIPv6Addr.m_pucBytes, PrefixLenInBytes(p_rNodePrefix.m_u8PrefixLen));

    oData.m_u8ParentType = p_enumParentType;

	memcpy(oData.m_au8ParentId, p_pu8ParentId, IPv6_HOST_ID_LEN);

    oData.m_u32Timestamp = (uint32_t)(time(NULL));

	NLOG_INFO("Encap+ %s", oData.GetPrintable());

    oData.HtoN();

    pMsg->SetData((uint8_t*)(&oData), sizeof(oData));

	m_shpoCnsTopoNotifMsg->OptionAddEncap(pMsg.get());
}
Ejemplo n.º 16
0
Archivo: main.c Proyecto: 1587/ltp
/*
 * Creates a new test structure and adds it to the list of
 * test structures already available.  Allocate all memory
 * needed by the new test.
 *
 * Returns the newly created test structure
 */
test_ll_t *getNewTest(test_ll_t * testList)
{
	test_ll_t *pNewTest;

	if ((pNewTest = (test_ll_t *) ALLOC(sizeof(test_ll_t))) == NULL) {
		pMsg(ERR, &cleanArgs,
		     "%d : Could not allocate memory for new test.\n",
		     GETLASTERROR());
		return NULL;
	}

	memset(pNewTest, 0, sizeof(test_ll_t));

	if ((pNewTest->args =
	     (child_args_t *) ALLOC(sizeof(child_args_t))) == NULL) {
		pMsg(ERR, &cleanArgs,
		     "%d : Could not allocate memory for new test.\n",
		     GETLASTERROR());
		FREE(pNewTest);
		return NULL;
	}
	if ((pNewTest->env = (test_env_t *) ALLOC(sizeof(test_env_t))) == NULL) {
		pMsg(ERR, &cleanArgs,
		     "%d : Could not allocate memory for new test.\n",
		     GETLASTERROR());
		FREE(pNewTest->args);
		FREE(pNewTest);
		return NULL;
	}
	memcpy(pNewTest->args, &cleanArgs, sizeof(child_args_t));
	memcpy(pNewTest->env, &cleanEnv, sizeof(test_env_t));

	pNewTest->next = testList;
	testList = pNewTest;
	return pNewTest;
}
Ejemplo n.º 17
0
void VideoDemuxerThread::seek(int seqNum, float destTime)
{
    map<int, VideoMsgQueuePtr>::iterator it;
    m_pDemuxer->seek(destTime);
    for (it = m_PacketQs.begin(); it != m_PacketQs.end(); it++) {
        VideoMsgQueuePtr pPacketQ = it->second;
        clearQueue(pPacketQ);

        // send SEEK_DONE
        VideoMsgPtr pMsg(new VideoMsg);
        pMsg->setSeekDone(seqNum, destTime);
        pPacketQ->push(pMsg);
        m_PacketQEOFMap[it->first] = false;
    }
    m_bEOF = false;
}
Ejemplo n.º 18
0
LRESULT CChatWnd::OnChatMessage(WPARAM /*wParam*/, LPARAM lParam)
{
    CAutoPtr< CChatMessage > pMsg( (CChatMessage*)lParam );

    if ( pMsg->m_hBitmap )
    {
        CChatWnd::AddBitmap( pMsg->m_hBitmap );
    }

    switch ( pMsg->m_bType )
    {
    case cmtProfile:
        Open();
        SetAlert();
        CChatWnd::AddLogin( pMsg->m_sFrom );
        break;

    case cmtError:
        SetAlert();
    case cmtStatus:
    case cmtInfo:
        CChatWnd::OnStatusMessage( (int)pMsg->m_bType - (int)cmtStatus, pMsg->m_sMessage );
        break;

    case cmtMessage:
        CChatWnd::OnMessage( false, GetChatID(), false, pMsg->m_sFrom, MyProfile.GetNick(), pMsg->m_sMessage );
        break;

    case cmtAction:
        CChatWnd::OnMessage( false, GetChatID(), false, pMsg->m_sFrom, MyProfile.GetNick(), pMsg->m_sMessage );
        break;

    case cmtCaption:
        m_sCaption = _T(" : ") + pMsg->m_sMessage;
        break;

    default:
        ;
    }

    SetWindowText( GetCaption() + m_sCaption );

    return 0;
}
Ejemplo n.º 19
0
FFFunctionThreadPool::~FFFunctionThreadPool()
{
	while (m_iParaFuncNum)
	{
		utl::sleep<1>();
	}
	utl::MsgPort<FFMsg> port;
	port.setMsgSwitch(m_oSwitch);
	FFMsgPtr pMsg(new FFMsg(FFMsg::mt_terminate, 0));
	port.sendMsg(pMsg->getType(), pMsg);

	for (int i = 0; i < m_iPoolSize; ++i)
		m_pWorkers[i].terminate();

	m_oTP.wait();
#ifdef _DEBUG
	log_tpool("FFFunctionThreadPool", "~FFFunctionThreadPool(), workers terminated!");
#endif
	delete[] m_pWorkers;
}
Ejemplo n.º 20
0
void VideoDecoderThread::seek(float destTime)
{
    while (!m_MsgQ.empty()) {
        m_MsgQ.pop(false);
    }

    float VideoFrameTime = -1;
    float AudioFrameTime = -1;
    m_pDecoder->seek(destTime);
    if (m_pDecoder->getVideoInfo().m_bHasVideo) {
        VideoFrameTime = m_pDecoder->getCurTime(SS_VIDEO);
    }
    if (m_pDecoder->getVideoInfo().m_bHasAudio) {
        AudioFrameTime = m_pDecoder->getCurTime(SS_AUDIO);
    }
    
    VideoMsgPtr pMsg(new VideoMsg());
    pMsg->setSeekDone(VideoFrameTime, AudioFrameTime);
    m_MsgQ.push(pMsg);
}
Ejemplo n.º 21
0
bool VideoDemuxerThread::work() 
{
    if (m_bEOF) {
        waitForCommand();
    } else {
        map<int, VideoMsgQueuePtr>::iterator it;
        int shortestQ = -1;
        int shortestLength = INT_MAX;
        for (it = m_PacketQs.begin(); it != m_PacketQs.end(); it++) {
            if (it->second->size() < shortestLength && 
                    it->second->size() < it->second->getMaxSize() &&
                    !m_PacketQEOFMap[it->first])
            {
                shortestLength = it->second->size();
                shortestQ = it->first;
            }
        }
        
        if (shortestQ < 0) {
            // All queues are at their max capacity. Take a nap and try again later.
            // Note that we can't wait on the queue. If decoding is paused, the queues can
            // remain full indefinitely and commands from the application (seek() and 
            // close() must still be processed.
            msleep(10);
            return true;
        }

        AVPacket * pPacket = m_pDemuxer->getPacket(shortestQ);
        VideoMsgPtr pMsg(new VideoMsg);
        if (pPacket == 0) {
            onStreamEOF(shortestQ);
            pMsg->setEOF();
        } else {
            pMsg->setPacket(pPacket);
        }
        m_PacketQs[shortestQ]->push(pMsg);
        msleep(0);
    }
    return true;
}
Ejemplo n.º 22
0
void PeerNode::HandleConnectionBroken()
{
	m_bConnected = false;
	ConnectionManagerPtr pConnMgr = ConnectionManager::GetConnectionManager();
	if( pConnMgr == NULL ) return;

	PeerPtr pPeer = pConnMgr->GetPeer();
	if( pPeer == NULL ) return;

	// send the message to the main peer
	MessageQueuePtr pMsgQ = pPeer->GetMessageQueue();
	if( pMsgQ == NULL ) return;

	WMessagePtr pWMsg(new WMessage);
	pWMsg->SetPeerId(this->m_peerId);
	pWMsg->SetSysMsg(CONNECTION_FAILURE_ON_PEER);
	MessagePtr pMsg(new Message);
	pMsg->m_conn = this->m_pConn;
	pMsg->m_mesgType = INTERNAL;
	pWMsg->SetMsg(pMsg);
	pMsgQ->PutMessage(pWMsg);
}
Ejemplo n.º 23
0
void VideoDecoderThread::sendFrame(AVFrame* pFrame)
{
    VideoMsgPtr pMsg(new VideoMsg());
    vector<BitmapPtr> pBmps;
    if (pixelFormatIsPlanar(m_PF)) {
        ScopeTimer timer(CopyImageProfilingZone);
        IntPoint halfSize(m_Size.x/2, m_Size.y/2);
        pBmps.push_back(getBmp(m_pBmpQ, m_Size, I8));
        pBmps.push_back(getBmp(m_pHalfBmpQ, halfSize, I8));
        pBmps.push_back(getBmp(m_pHalfBmpQ, halfSize, I8));
        if (m_PF == YCbCrA420p) {
            pBmps.push_back(getBmp(m_pBmpQ, m_Size, I8));
        }
        for (unsigned i = 0; i < pBmps.size(); ++i) {
            m_pFrameDecoder->copyPlaneToBmp(pBmps[i], pFrame->data[i], 
                    pFrame->linesize[i]);
        }
    } else {
        pBmps.push_back(getBmp(m_pBmpQ, m_Size, m_PF));
        m_pFrameDecoder->convertFrameToBmp(pFrame, pBmps[0]);
    }
    pMsg->setFrame(pBmps, m_pFrameDecoder->getCurTime());
    pushMsg(pMsg);
}
Ejemplo n.º 24
0
/*
 * checks validity of data after parsing
 * args and make assumtions. returns 0 on
 * success and -1 on failure.
 */
int check_conclusions(child_args_t *args)
{
	extern unsigned long glb_flags;
	struct stat stat_buf;
	int rv;

	if ((args->flags & CLD_FLG_DUTY) && ((args->flags & CLD_FLG_LINEAR) || (args->flags & CLD_FLG_NTRLVD))) {
		pMsg(WARN, args, "Duty cycle testing is supported for random (-pR) tests only.\n");
		return(-1);
	}
	if ((args->flags & CLD_FLG_BLK_RNG) && (args->flags & CLD_FLG_RTRSIZ)) {
		pMsg(WARN, args, "Can't have unfixed block sizes and specify seek range in terms of blocks.\n");
		return(-1);
	}
	if ((args->vsiz < 0) || (args->ltrsiz < 1) || (args->htrsiz < 1)) {
		pMsg(WARN, args, "Bounds exceeded for transfer size and/or volume size.\n");
		pMsg(WARN, args, MAXTRSIZ, (args->htrsiz*BLK_SIZE),args->vsiz);
		return(-1);
	}
	if (args->htrsiz < args->ltrsiz) {
		pMsg(ERR, args, "Min transfer size, %lu, greater then Max transfer size, %lu.\n", args->ltrsiz, args->htrsiz);
		return(-1);
	}
	if (args->vsiz < (args->stop_lba-args->start_lba+1)) {
		pMsg(ERR, args, "Volume stop block/lba exceeds volume size.\n");
		return(-1);
	}
	if (args->vsiz < args->htrsiz) {
		pMsg(WARN, args, VSIZETS, args->vsiz, args->htrsiz);
		return(-1);
	}
	if ((args->flags & CLD_FLG_TMD) == 0 && (args->seeks <= 0)) {
		pMsg(WARN,args, TSEEK, args->seeks);
		return(-1);
	}
	if ((args->flags & CLD_FLG_SKS) && (args->t_kids > args->seeks)) {
		pMsg(WARN, args, "Can't have more children then max number of seeks, use -K/-L to adjust.\n");
		return(-1);
	}
	if ((args->start_blk > args->vsiz) && !(args->flags & (CLD_FLG_BLK_RNG|CLD_FLG_LBA_RNG))) {
		pMsg(WARN, args, STBGTTLBA, args->start_blk, (args->vsiz / args->htrsiz));
		return(-1);
	}
	if ((args->stop_blk > args->vsiz) && !(args->flags & (CLD_FLG_BLK_RNG|CLD_FLG_LBA_RNG))) {
		pMsg(WARN, args, SBGTTLBA, args->stop_blk, (args->vsiz / args->htrsiz));
		return(-1);
	}
	if ((args->start_lba > args->vsiz) && !(args->flags & (CLD_FLG_BLK_RNG|CLD_FLG_LBA_RNG))) {
		pMsg(WARN, args, STLBAGTLBA, args->start_lba, args->vsiz);
		return(-1);
	}
	if ((args->stop_lba > args->vsiz) && !(args->flags & (CLD_FLG_BLK_RNG|CLD_FLG_LBA_RNG))) {
		pMsg(WARN, args, SLBAGTLBA, args->stop_lba, args->vsiz);
		return(-1);
	}
	if (args->start_blk > args->stop_blk) {
		pMsg(WARN, args, SBRSB, args->stop_blk, args->start_blk);
		return(-1);
	}
	if (args->start_lba > args->stop_lba) {
		pMsg(ERR, args, SLBARSLBA, args->stop_lba, args->start_lba);
		return(-1);
	}
	if ((args->flags & CLD_FLG_LBA_RNG) && (args->flags & CLD_FLG_BLK_RNG)) {
		pMsg(ERR, args, "Can't specify range in both block and LBA, use -s or -S.\n");
		return(-1);
	}

	/* use stat to get file properties, and test then agains specified -I */
	rv = stat(args->device, &stat_buf);
	if (0 == rv) { /* no error on call to stat, compare against -I option */
		/* files are usually file type */
		if ((args->flags & CLD_FLG_FILE) && !IS_FILE(stat_buf.st_mode)) {
			pMsg(ERR, args, "Can't open non-file filespec with file device type, -If.\n");
			return(-1);
		}
		/* block devices, are usually block type */
		if ((args->flags & CLD_FLG_BLK) && !IS_BLK(stat_buf.st_mode)) {
			pMsg(ERR, args, "Can't open non-block filespec with block device type, -Ib.\n");
			return(-1);
		}
#ifndef WINDOWS
		/* raw devices, are usually character type */
		if ((args->flags & CLD_FLG_RAW) && !S_ISCHR(stat_buf.st_mode)) {
			pMsg(ERR, args, "Can't open non-raw filespec with raw device type, -Ir.\n");
			return(-1);
		}
#else
		if (args->flags & CLD_FLG_RAW) {
			pMsg(ERR, args, "RAW IO type not supported in Windows, use direct IO instead.\n");
			return(-1);
		}
#endif
#ifdef _DEBUG
	} else {
		PDBG1(DBUG, args, "Can't get status on %s, assuming a new file, errno = %d\n", args->device, GETLASTERROR());
#endif
	}

	if ((args->hbeat > 0) && (args->flags & CLD_FLG_TMD) && (args->hbeat > args->run_time)) {
		pMsg(ERR, args, "Heartbeat should be at least equal to runtime, use -h/-T to adjust.\n");
		return(-1);
	}
	if ((args->hbeat > 0) && !(args->flags & CLD_FLG_PRFTYPS)) {
		pMsg(ERR, args, "At least one performance option, -P, must be specified when using -h.\n");
		return(-1);
	}
	if ((args->flags & CLD_FLG_W) && !(args->flags & CLD_FLG_R) && (args->flags & CLD_FLG_CMPR)) {
		pMsg(ERR, args, "Write only, ignoring option -E.\n");
	}
	if ((args->flags & CLD_FLG_TMD) && (args->flags & CLD_FLG_SKS)) {
		pMsg(ERR, args, "Can't specify both -L and -T they are mutually exclusive.\n");
		return(-1);
	}
	if (((args->flags & CLD_FLG_R) && !(args->flags & CLD_FLG_W)) && (args->flags & CLD_FLG_ERR_MARK)) {
		pMsg(ERR, args, "Can't specify mark on error, -Am, in read only mode.\n");
		return(-1);
	}
	if (!(args->flags & CLD_FLG_ALLDIE) && (args->flags & CLD_FLG_ERR_MARK)) {
		pMsg(ERR, args, "Can't specify mark on error, -Am, when continue on error is set.\n");
		return(-1);
	}
	if ((glb_flags & GLB_FLG_KILL) && !(args->flags & CLD_FLG_ALLDIE)) {
		pMsg(ERR, args, "Can't specify global kill, -Ag, when continue on error is set, -Ac.\n");
		return(-1);
	}
	if ((args->flags & CLD_FLG_LINEAR) && !(args->flags & CLD_FLG_NTRLVD) && (args->flags & CLD_FLG_TMD)) {
		pMsg(ERR, args, "Linear read / write test can not be timed.\n");
		return(-1);
	}
	if ((args->flags & CLD_FLG_CMPR) && (args->cmp_lng > (args->ltrsiz*BLK_SIZE))) {
		pMsg(ERR, args, "Compare length, %lu, is greater then transfer size, %lu\n", args->cmp_lng, args->ltrsiz*BLK_SIZE);
		return(-1);
	}
	if ((args->flags & CLD_FLG_OFFSET) && (args->offset > args->stop_lba)) {
		pMsg(ERR, args, LBAOFFGSLBA, args->offset, args->stop_lba);
		return(-1);
	}
	if ((args->flags & CLD_FLG_OFFSET) && ((args->offset+args->ltrsiz-1) > args->stop_lba)) {
		pMsg(ERR, args, LBAOTSGSLBA, args->offset, args->ltrsiz, args->stop_lba);
		return(-1);
	}
	return 0;
}
Ejemplo n.º 25
0
int make_assumptions(child_args_t *args)
{
	char TmpStr[80];
	struct stat stat_buf;
	int rv;

	if (!(args->flags & CLD_FLG_IOTYPS)) {
		/* use stat to get file properties, and use to set -I */
		rv = stat(args->device, &stat_buf);
		if (0 == rv) {
			if (IS_FILE(stat_buf.st_mode)) {
				strncat(args->argstr, "(-I f) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
				args->flags |= CLD_FLG_FILE;
			} else if (IS_BLK(stat_buf.st_mode)) {
				strncat(args->argstr, "(-I b) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
				args->flags |= CLD_FLG_BLK;
#ifndef WINDOWS
			} else if (S_ISCHR(stat_buf.st_mode)) {
				strncat(args->argstr, "(-I r) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
				args->flags |= CLD_FLG_RAW;
#endif
			}
		} else {
			pMsg(WARN, args, "Can't get status on %s, defaulting to file, errno = %d\n", args->device, GETLASTERROR());
			strncat(args->argstr, "(-I f) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
			args->flags |= CLD_FLG_FILE;
		}
	}
	if ((args->flags & CLD_FLG_WFSYNC) && (0 == args->sync_interval)) {
		pMsg(INFO, args, "Sync interval set to zero, assuming interval of 1.\n");
		args->sync_interval = 1;
	}

	if (args->ltrsiz <= 0) {
		sprintf(TmpStr, "(-B %d) ", TRSIZ*BLK_SIZE);
		strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr));
		args->ltrsiz=TRSIZ;
		args->htrsiz=TRSIZ;
	}
	if (args->flags & CLD_FLG_LBA_RNG) {
		args->start_blk = args->start_lba / args->htrsiz;
		if (!(args->stop_lba < 0))
			args->stop_blk = args->stop_lba / args->htrsiz;
	}
	if (args->flags & CLD_FLG_BLK_RNG) {
		args->start_lba = args->start_blk * args->htrsiz;
		if (!(args->stop_blk < 0))
			args->stop_lba = (args->stop_blk * args->htrsiz) + (args->htrsiz - 1);
	}
	/* if vsiz is still not set, try and get it from the file */
	if ((args->vsiz <=0) && (args->flags & CLD_FLG_FILE)) {
		if (0 != get_file_size(args->device)) { /* file size retrieved */
			args->vsiz=get_file_size(args->device);
		}
	}
	/* if vsiz is still not set, try and get it from the device */
	if ((args->vsiz <= 0) && !(args->flags & CLD_FLG_FILE)) {
		args->vsiz=get_vsiz(args->device);
	}
	/* if vsiz is still not set, set based on given range */
	if ((args->vsiz <=0) && (args->flags & (CLD_FLG_LBA_RNG|CLD_FLG_BLK_RNG))) {
		if (!(args->stop_lba < 0))
			args->vsiz=args->stop_lba+1;
		else
			args->vsiz=args->start_lba+1;
	}
	/* if vsiz is still not set, then set it to the default size */
	if (args->vsiz <= 0) {
		args->vsiz=VSIZ;
	}
	if (!(args->flags & CLD_FLG_VSIZ)) {
		sprintf(TmpStr, N_ASSUME, args->vsiz);
		strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr));
	}

	if (args->stop_lba == -1) {
		args->stop_lba=args->vsiz-1;
	}
	if (args->stop_blk == -1) {
		args->stop_blk=(args->stop_lba / (OFF_T) args->htrsiz);
	}
	if (args->t_kids == 0) {
		sprintf(TmpStr, "(-K %d) ", KIDS);
		strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr));
		args->t_kids=KIDS;
	}
	if ((args->flags & (CLD_FLG_W|CLD_FLG_R)) == 0) {
		if (args->flags & CLD_FLG_DUTY) { /* no read/write but duty cycle specified */
			if (args->rperc > 0) {
				args->flags |= CLD_FLG_R;
				strncat(args->argstr, "(-r) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
			}
			if (args->wperc > 0) {
				args->flags |= CLD_FLG_W;
				strncat(args->argstr, "(-w) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
			}
		} else {
			strncat(args->argstr, "(-r) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
			args->flags |= CLD_FLG_R;
		}
	}
	if (!(args->flags & CLD_FLG_PTYPS)) {
		strncat(args->argstr, "(-c) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
		args->flags |= CLD_FLG_CPTYPE;
	}
	if (!(args->flags & CLD_FLG_SKTYPS)) {
		strncat(args->argstr, "(-p R) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
		args->flags |= CLD_FLG_RANDOM;
	}
	if (!(args->flags & CLD_FLG_SKS)) {
		if (args->start_blk == args->stop_blk) { /* diskcache test, w/ no seek count set */
			args->seeks = SEEKS;
		} else if (args->flags & (CLD_FLG_BLK_RNG|CLD_FLG_LBA_RNG)) { /* range set, w/ no seek count */
			args->seeks = args->stop_blk - args->start_blk + 1;
		} else {
			/* if vsiz is available, calculated seeks are in terms of the largest transfer size */
			args->seeks = (args->vsiz > 0) ? (args->vsiz / args->htrsiz) : SEEKS;
		}
		if ((args->flags & CLD_FLG_LINEAR) && (args->flags & CLD_FLG_R) && (args->flags & CLD_FLG_W)) {
			args->seeks *= 2;
		}

		if (!(args->flags & CLD_FLG_TMD)) {
			sprintf(TmpStr, L_ASSUME, args->seeks);
			strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr));
		}
	}
	if (!(args->flags & (CLD_FLG_SKS|CLD_FLG_TMD)) || ((args->flags & CLD_FLG_CYC) && !(args->flags & (CLD_FLG_SKS|CLD_FLG_TMD)))) {
		args->flags |= CLD_FLG_SKS;
	}
	if (args->flags & (CLD_FLG_LINEAR)) {
		if (!(args->flags & (CLD_FLG_LUNU|CLD_FLG_LUND))) {
			strncat(args->argstr, "(-p u) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
			args->flags |= CLD_FLG_LUNU;
		}
	}
	normalize_percs(args);
	if (!(args->flags & CLD_FLG_DUTY) && (args->flags & CLD_FLG_RANDOM) && !(args->flags & CLD_FLG_NTRLVD)) {
		sprintf(TmpStr, "(-D %d:%d) ", args->rperc, args->wperc);
		strncat(args->argstr, TmpStr, (MAX_ARG_LEN-1)-strlen(args->argstr));
		args->flags |= CLD_FLG_DUTY;
	}
	if ((args->delayTimeMin == 0) && (args->delayTimeMax == 0) && (args->ioTimeout == DEFAULT_IO_TIMEOUT)) {
		strncat(args->argstr, "(-t 0:2m) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
	}
	if (!(args->flags & CLD_FLG_OFFSET)) {
		strncat(args->argstr, "(-o 0) ", (MAX_ARG_LEN-1)-strlen(args->argstr));
	}

	return 0;
}
Ejemplo n.º 26
0
int fill_cld_args(int argc, char **argv, child_args_t *args)
{
	extern char *optarg;
	extern int optind;
	extern unsigned long glb_flags;

	signed char c;
	char *leftovers;

	while ((c = getopt(argc, argv, "?a:A:B:cC:dD:E:f:Fh:I:K:L:m:M:nN:o:p:P:qQrR:s:S:t:T:wvV:z")) != -1) {
		switch(c) {
			case ':' :
				pMsg(WARN, args, "Missing argument for perameter.\n");
				usage();
				return(-1);
			case 'V' :
#ifdef _DEBUG
				if (optarg == NULL) {
					pMsg(WARN, args, "-%c option requires an argument.\n", c);
					exit(1);
				}
				if (!isdigit(optarg[0])) {
					pMsg(WARN, args, "-%c argument is non numeric.\n", c);
					exit(1);
				}
				gbl_dbg_lvl = atoi(optarg);
#else
				pMsg(ERR, args, "Debug code not compiled in, recompile with _DEBUG directive.\n", c);
				exit(1);
#endif
				break;
			case 'd' :
				glb_flags |= GLB_FLG_QUIET;
				args->flags |= CLD_FLG_DUMP;
				break;
			case 'a' :
				if (optarg == NULL) {
					pMsg(WARN, args, "-%c option requires an argument.\n", c);
					return(-1);
				}
				if (!isdigit(optarg[0])) {
					pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
					return(-1);
				}
				args->seed = (unsigned int) strtol(optarg, NULL, 0);
				break;
			case 'A' :
				if (optarg == NULL) {
					pMsg(WARN, args, "-%c option requires an argument.\n", c);
					exit(1);
				}
				if (strchr(optarg,'g')) {
					glb_flags |= GLB_FLG_KILL;
				}
				if (strchr(optarg,'c')) {
					args->flags &= ~CLD_FLG_ALLDIE;
				}
				if (strchr(optarg,'m')) {
					args->flags |= CLD_FLG_ERR_MARK;
				}
				if (strchr(optarg,'r')) {
					args->flags &= ~CLD_FLG_ERR_REREAD;
				}
				if (strchr(optarg,'s')) {
					args->flags &= ~CLD_FLG_LBA_SYNC;
				}
				if (strchr(optarg,'S')) {
					args->flags |= CLD_FLG_IO_SERIAL;
				}
				if (strchr(optarg,'w')) {
					args->flags |= CLD_FLG_WRITE_ONCE;
				}
				if (strchr(optarg,'W')) {
					args->flags |= CLD_FLG_UNIQ_WRT;
				}
				if (strchr(optarg,'t')) {
					args->flags |= CLD_FLG_TMO_ERROR;
				}
				break;
			case 'q' :
				glb_flags |= GLB_FLG_QUIET;
				break;
			case 'Q' :
				glb_flags |= GLB_FLG_SUPRESS;
				break;
			case 'v' :
				pMsg(INFO, args, "Version %s\n", VER_STR);
				exit(0);
			case 'p' :
				if (optarg == NULL) {
					pMsg(WARN, args, "-%c option requires an argument.\n", c);
					return(-1);
				}
				if (args->flags & (CLD_FLG_LINEAR|CLD_FLG_RANDOM)) {
					pMsg(WARN, args, "Only one seek type, -p, can be specified.\n");
					return(-1);
				}
				/* seek pattern type */
				if (strchr(optarg,'L'))
					args->flags |= CLD_FLG_LINEAR;
				else if (strchr(optarg,'l'))
					args->flags |= (CLD_FLG_LINEAR|CLD_FLG_NTRLVD);
				else if (strchr(optarg,'R'))
					args->flags |= CLD_FLG_RANDOM;
				else if (strchr(optarg,'r'))
					args->flags |= (CLD_FLG_RANDOM|CLD_FLG_NTRLVD);
				else {
					pMsg(WARN, args, "Unknown Seek pattern\n");
					usage();
					return(-1);
				}
				if (strchr(optarg,'U') || strchr(optarg,'u'))
					if ((args->flags & (CLD_FLG_LINEAR)) &&
							!(args->flags & CLD_FLG_LUND))
						args->flags |= CLD_FLG_LUNU;
				if (strchr(optarg,'D') || strchr(optarg,'d'))
					if ((args->flags & (CLD_FLG_LINEAR)) &&
							!(args->flags & CLD_FLG_LUNU))
						args->flags |= CLD_FLG_LUND;
				break;
			case 'B' :
				if (!isdigit(optarg[0])) {
					pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
					return(-1);
				}
				if (strchr(optarg,':') != NULL) { /* we are given a range of transfer sizes */
					args->flags |= CLD_FLG_RTRSIZ;
					args->ltrsiz = strtoul(optarg, &leftovers, 10);
					if (leftovers == strchr(leftovers,'k')) { /* first value had a 'k' */
						args->ltrsiz *= 2;
						leftovers++;
					} else if (leftovers == strchr(leftovers, 'm')) {	/* first value had a 'm' */
						args->ltrsiz *= (2 * 1024);
						leftovers++;
					} else {
						if (args->ltrsiz > 256)
							args->ltrsiz /= BLK_SIZE;
					}
					if (!isdigit(leftovers[1])) {
						pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
						return(-1);
					}
					args->htrsiz = atol((char *)strchr(leftovers,':')+1);
					if ((strchr(leftovers,'k')) != NULL) {/* second value had a 'k' */
						args->htrsiz *= 2;
					} else if ((strchr(leftovers,'m')) != NULL) {	/* second value had a 'm' */
						args->htrsiz *= (2 * 1024);
					} else {
						if (args->htrsiz > 256)
							   args->htrsiz /= BLK_SIZE;
					}
				} else { /* only a single value given for transfer size */
					args->ltrsiz = atoi(optarg);
					if (strchr(optarg,'k')) {
						args->ltrsiz *= 2;
					} else if (strchr(optarg,'m')) {
						args->ltrsiz *= (2 * 1024);
					} else {
						if (args->ltrsiz > 256)
							   args->ltrsiz /= BLK_SIZE;
					}
					args->htrsiz = args->ltrsiz;
				}
#ifdef _DEBUG
				PDBG5(DBUG, args, "Parsed Transfer size: %ld\n", args->htrsiz);
#endif
				break;
			case 'c' :
				if (args->flags & CLD_FLG_PTYPS) {
					pMsg(WARN, args, "Please specify only one pattern type\n");
					usage();
					return(-1);
				}
				args->flags |= CLD_FLG_CPTYPE;
				break;
			case 'n' :
				if (args->flags & CLD_FLG_PTYPS) {
					pMsg(WARN, args, "Please specify only one pattern type\n");
					usage();
					return(-1);
				}
				args->flags |= CLD_FLG_LPTYPE;
				break;
			case 'f' :
				if (optarg == NULL) {
					pMsg(WARN, args, "-%c option requires an argument.\n", c);
					return(-1);
				}
				if (args->flags & CLD_FLG_PTYPS) {
					pMsg(WARN, args, "Please specify only one pattern type\n");
					usage();
					return(-1);
				}
				args->pattern = my_strtofft(optarg);
				args->flags |= CLD_FLG_FPTYPE;
				break;
			case 'F' :
				/* the filespec is a list of filespecs in a file */
				args->flags |= CLD_FLG_FSLIST;
				break;
			case 'z' :
				if (args->flags & CLD_FLG_PTYPS) {
					pMsg(WARN, args, "Please specify only one pattern type\n");
					usage();
					return(-1);
				}
				args->flags |= CLD_FLG_RPTYPE;
				break;
			case 'h' :
				if (optarg == NULL) {
					pMsg(WARN, args, "-%c option requires an argument.\n", c);
					return(-1);
				}
				if (!isdigit(optarg[0])) {
					pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
					usage();
					return(-1);
				}
				args->flags |= CLD_FLG_HBEAT;
				args->hbeat = atoi(optarg);
				if (strchr(optarg,'m')) {	/* multiply by sec */
					args->hbeat *= 60;
				} else if (strchr(optarg,'h')) { /* multiply sec*min */
					args->hbeat *= (time_t) (60*60);
				} else if (strchr(optarg,'d')) { /* multiply by sec*min*hours */
					args->hbeat *= (time_t) (60*60*24);
				}
				break;
			case 'D' :
				if (optarg == NULL) {
					pMsg(WARN, args, "-%c option requires an argument.\n", c);
					return(-1);
				}
				if (!isdigit(optarg[0])) {
					pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
					usage();
					return(-1);
				}
				args->rperc = atoi(optarg);
				args->wperc = atoi((char *)(strchr(optarg,':')+1));
				args->flags |= CLD_FLG_DUTY;
				break;
			case 'r' :
				args->flags |= CLD_FLG_R;
				break;
			case 'w' :
				args->flags |= CLD_FLG_W;
				break;
			case 'o' :
				if (optarg == NULL) {
					pMsg(WARN, args, "-%c option requires an argument.\n", c);
					return(-1);
				}
				args->offset = atol(optarg);
				args->flags |= CLD_FLG_OFFSET;
				break;
			case 'R' :
				if (optarg == NULL) {
					pMsg(WARN, args, "-%c option requires an argument.\n", c);
					return(-1);
				}
				if (strchr(optarg,':') != NULL) { /* we are given a retry delay */
					args->retries = strtol(optarg, &leftovers, 10);
					args->retry_delay = (time_t) atol((char *)strchr(leftovers,':')+1);
				} else { /* only a retry count given */
					args->retries = atoi(optarg);
				}
				break;
			case 'M' :
				if (optarg == NULL) {
					pMsg(WARN, args, "-%c option requires an argument.\n", c);
					return(-1);
				}
				args->flags |= CLD_FLG_ALT_MARK;
				args->alt_mark = my_strtofft(optarg);
				break;
			case 'm' :
				args->flags |= CLD_FLG_MBLK;
				if (optarg == NULL) {
					pMsg(WARN, args, "-%c option requires an argument.\n", c);
					return(-1);
				}
				if (strchr(optarg,'l')) { /* returns NULL if char is not found */
					args->flags |= CLD_FLG_MRK_LBA;
				}
				if (strchr(optarg,'p')) {
					args->flags |= CLD_FLG_MRK_PASS;
				}
				if (strchr(optarg,'t')) {
					args->flags |= CLD_FLG_MRK_TIME;
				}
				if (strchr(optarg,'s')) {
					args->flags |= CLD_FLG_MRK_SEED;
				}
				if (strchr(optarg,'h')) {
					args->flags |= CLD_FLG_MRK_HOST;
				}
				if (strchr(optarg,'f')) {
					args->flags |= CLD_FLG_MRK_TARGET;
				}
				if (strchr(optarg,'a')) {
					args->flags |= CLD_FLG_MRK_ALL;
				}
				if (!strchr(optarg,'l') &&
						!strchr(optarg,'p') &&
						!strchr(optarg,'t') &&
						!strchr(optarg,'s') &&
						!strchr(optarg,'h') &&
						!strchr(optarg,'f') &&
						!strchr(optarg,'a')) {
					pMsg(WARN, args, "Unknown header mark option\n");
					return(-1);
				}
				break;
			case 'E' :
				if (optarg == NULL) {
					pMsg(WARN, args, "-%c option requires an argument.\n", c);
					return(-1);
				}
				if (!isdigit(optarg[0])) {
					pMsg(WARN, args, "-%c arguments are non numeric.\n", c);
					usage();
					return(-1);
				}
				args->flags |= CLD_FLG_CMPR;
				args->cmp_lng = strtol(optarg,NULL,0);
				if (strchr(optarg,'k')) {	/* multiply by 2^10 */
					args->cmp_lng <<= 10;
				} else if (strchr(optarg,'K')) { /* multiply 10^3 */
					args->cmp_lng *= 1000;
				} else if (strchr(optarg,'m')) { /* multiply by 2^20 */
					args->cmp_lng <<= 20;
				} else if (strchr(optarg,'M')) { /* multiply by 10^6 */
					args->cmp_lng *= 1000000;
				}
				break;
			case 'N' :
				if (optarg == NULL) {
					pMsg(WARN, args, "-%c option requires an argument.\n", c);
					return(-1);
				}
				if (!isdigit(optarg[0])) {
					pMsg(WARN, args, "-%c arguments are non numeric.\n", c);
					return(-1);
				}
				args->flags |= CLD_FLG_VSIZ;
				args->vsiz = my_strtofft(optarg);
				if (strchr(optarg,'k')) {	/* multiply by 2^10 */
					args->vsiz <<= 10;
				} else if (strchr(optarg,'K')) { /* multiply 10^3 */
					args->vsiz *= 1000;
				} else if (strchr(optarg,'m')) { /* multiply by 2^20 */
					args->vsiz <<= 20;
				} else if (strchr(optarg,'M')) { /* multiply by 10^6 */
					args->vsiz *= 1000000;
				} else if (strchr(optarg,'g')) { /* multiply by 2^30 */
					args->vsiz <<= 30;
				} else if (strchr(optarg,'G')) { /* multiply by 10^9 */
					args->vsiz *= 1000000000;
				}
				break;
			case 'I' :
				if (optarg == NULL) {
					pMsg(WARN, args, "-%c option requires an argument.\n", c);
					return(-1);
				}
				if (strchr(optarg,'R') || strchr(optarg,'r')) {
					if (!(args->flags & CLD_FLG_BLK) &&
					    !(args->flags & CLD_FLG_FILE)) {
						args->flags |= CLD_FLG_RAW;
					} else {
						pMsg(WARN, args, "Can only specify one IO type\n");
						return(-1);
					}
				}
				if (strchr(optarg,'B') || strchr(optarg,'b')) {
					if (!(args->flags & CLD_FLG_RAW) &&
					    !(args->flags & CLD_FLG_FILE)) {
						args->flags |= CLD_FLG_BLK;
					} else {
						pMsg(WARN, args, "Can only specify one IO type\n");
						return(-1);
					}
				}
				if (strchr(optarg,'F') || strchr(optarg,'f')) {
					if (!(args->flags & CLD_FLG_RAW) &&
					    !(args->flags & CLD_FLG_BLK)) {
						args->flags |= CLD_FLG_FILE;
					} else {
						pMsg(WARN, args, "Can only specify one IO type\n");
						return(-1);
					}
				}
				if (strchr(optarg,'D') || strchr(optarg,'d')) {
					args->flags |= CLD_FLG_DIRECT;
				}
				if (strchr(optarg,'s')) {
					args->sync_interval = strtoul((char *)strchr(optarg,'s')+1, NULL, 10);
#ifdef _DEBUG
					PDBG3(DBUG, args, "Parsed sync interval: %ld\n", args->sync_interval);
#endif
					if ((args->flags & CLD_FLG_DIRECT)) {
						pMsg(ERR, args, "Can't specify sync with Direct IO\n");
						return(-1);
					}
					args->flags |= CLD_FLG_WFSYNC;
				}
				break;
			case 't' :
				if (optarg == NULL) {
					pMsg(WARN, args, "-%c option requires an argument.\n", c);
					return(-1);
				}

				if (strchr(optarg,':') != NULL) { /* we are given a option for delay & timeout */
					args->delayTimeMin = strtoul(optarg, &leftovers, 10);
					/* check to see if we have one or more then one ':' */
					if ((char *)strchr(optarg,':') == (char *)strrchr(optarg,':')) {
						/* only one ':', assume no random delayTime, and ioTimeout */
						args->delayTimeMax = args->delayTimeMin;
						args->ioTimeout = (time_t) atol((char *)strchr(leftovers,':')+1);
					} else {
						/* more then one ':', assume random delayTime, and ioTimeout */
						args->delayTimeMax = strtoul(leftovers+1, &leftovers, 10);
						args->ioTimeout = (time_t) atol((char *)strchr(leftovers,':')+1);
					}
					if (strchr(leftovers,'m')) {	/* multiply by sec */
						args->ioTimeout *= 60;
					} else if (strchr(leftovers,'h')) { /* multiply sec*min */
						args->ioTimeout *= (time_t) (60*60);
					} else if (strchr(leftovers,'d')) { /* multiply by sec*min*hours */
						args->ioTimeout *= (time_t) (60*60*24);
					}
				} else {
					args->delayTimeMin = strtoul(optarg, (char **)NULL, 10);
					args->delayTimeMax = args->delayTimeMin;
				}
				break;
			case 'T' :
				if (optarg == NULL) {
					pMsg(WARN, args, "-%c option requires an argument.\n", c);
					return(-1);
				}
				args->run_time = atoi(optarg);
				args->flags |= CLD_FLG_TMD;
				if (strchr(optarg,'m')) {	/* multiply by sec */
					args->run_time *= 60;
				} else if (strchr(optarg,'h')) { /* multiply sec*min */
					args->run_time *= (time_t) (60*60);
				} else if (strchr(optarg,'d')) { /* multiply by sec*min*hours */
					args->run_time *= (time_t) (60*60*24);
				}
				break;
			case 'L' :
				if (optarg == NULL) {
					pMsg(WARN, args, "-%c option requires an argument.\n", c);
					return(-1);
				}
				args->seeks = atoi(optarg);
				args->flags |= CLD_FLG_SKS;
				if (strchr(optarg,'k')) {	/* multiply by 2^10 */
					args->seeks <<= 10;
				} else if (strchr(optarg,'K')) { /* multiply 10^3 */
					args->seeks *= 1000;
				} else if (strchr(optarg,'m')) { /* multiply by 2^20 */
					args->seeks <<= 20;
				} else if (strchr(optarg,'M')) { /* multiply by 10^6 */
					args->seeks *= 1000000;
				} else if (strchr(optarg,'g')) { /* multiply by 2^30 */
					args->seeks <<= 30;
				} else if (strchr(optarg,'G')) { /* multiply by 10^9 */
					args->seeks *= 1000000000;
				}
				break;
			case 'C' :
				if (optarg == NULL) {
					pMsg(WARN, args, "-%c option requires an argument.\n", c);
					return(-1);
				}
				if (!isdigit(optarg[0])) {
					pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
					usage();
					return(-1);
				}
				args->flags |= CLD_FLG_CYC;
				args->cycles = atol(optarg);
				break;
			case 'K' :
				if (optarg == NULL) {
					pMsg(WARN, args, "-%c option requires an argument.\n", c);
					return(-1);
				}
				if (!isdigit(optarg[0])) {
					pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
					usage();
					return(-1);
				}
				if (atoi(optarg) > MAX_THREADS) {
					pMsg(WARN, args, "%u exceeds max of %u threads.\n", atoi(optarg), MAX_THREADS);
					return(-1);
				}
				args->t_kids = atoi(optarg);
				break;
			case 'P' :
				if (optarg == NULL) {
					pMsg(WARN, args, "-%c option requires an argument.\n", c);
					return(-1);
				}
				if (strchr(optarg,'X')) { /* returns NULL if char is not found */
					args->flags |= CLD_FLG_XFERS;
				}
				if (strchr(optarg,'T')) {
					args->flags |= CLD_FLG_TPUTS;
				}
				if (strchr(optarg,'P')) {
					glb_flags |= GLB_FLG_PERFP;
				}
				if (strchr(optarg,'R')) {
					args->flags |= CLD_FLG_RUNT;
				}
				if (strchr(optarg,'C')) {
					args->flags |= CLD_FLG_PCYC;
				}
				if (strchr(optarg,'A')) {
					args->flags |= CLD_FLG_PRFTYPS;
				}
				if (!strchr(optarg,'P') &&
						!strchr(optarg,'A') &&
						!strchr(optarg,'X') &&
						!strchr(optarg,'R') &&
						!strchr(optarg,'C') &&
						!strchr(optarg,'T')) {
					pMsg(WARN, args, "Unknown performance option\n");
					return(-1);
				}
				break;
			case 'S' :
				if (!isdigit((int)optarg[0])) {
					pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
					return(-1);
				}
				args->flags |= CLD_FLG_BLK_RNG;
				if (strchr(optarg,':') != NULL) { /* we are given a range */
					args->start_blk = (OFF_T) strtoul(optarg, &leftovers, 0);
					if (leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */
						args->start_blk <<= 10;
						leftovers++;  /* at the ':' */
					} else if (leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */
						args->start_blk *= 1000;
						leftovers++;  /* at the ':' */
					} else if (leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */
						args->start_blk <<= 20;
						leftovers++;  /* at the ':' */
					} else if (leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */
						args->start_blk *= 1000000;
						leftovers++;  /* at the ':' */
					} else if (leftovers == strchr(leftovers,'g')) { /* multiply by 2^30 */
						args->start_blk <<= 30;
						leftovers++;  /* at the ':' */
					} else if (leftovers == strchr(leftovers,'G')) { /* multiply by 10^9 */
						args->start_blk *= 1000000000;
						leftovers++;  /* at the ':' */
					}
					leftovers++;  /* should be at the next value */
					if (!isdigit((int) leftovers[0])) {
						pMsg(WARN, args, "-%c arguments is non numeric.\n", c);
						return(-1);
					}
					args->stop_blk = (OFF_T) strtoul(leftovers, &leftovers, 0);
					if (leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */
						args->stop_blk <<= 10;
					} else if (leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */
						args->stop_blk *= 1000;
					} else if (leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */
						args->stop_blk <<= 20;
					} else if (leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */
						args->stop_blk *= 1000000;
					} else if (leftovers == strchr(leftovers,'g')) { /* multiply by 2^30 */
						args->stop_blk <<= 30;
					} else if (leftovers == strchr(leftovers,'G')) { /* multiply by 10^9 */
						args->stop_blk *= 1000000000;
					}
				} else { /* only a single value given */
					args->start_blk = (OFF_T) strtoul(optarg, &leftovers, 0);
					if (leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */
						args->start_blk <<= 10;
					} else if (leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */
						args->start_blk *= 1000;
					} else if (leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */
						args->start_blk <<= 20;
					} else if (leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */
						args->start_blk *= 1000000;
					} else if (leftovers == strchr(leftovers,'g')) { /* multiply by 2^30 */
						args->start_blk <<= 30;
					} else if (leftovers == strchr(leftovers,'G')) { /* multiply by 10^9 */
						args->start_blk *= 1000000000;
					}
				}
				break;
			case 's' :
				if (!isdigit((int)optarg[0])) {
					pMsg(WARN, args, "-%c argument is non numeric.\n", c);
					return(-1);
				}
				args->flags |= CLD_FLG_LBA_RNG;
				if (strchr(optarg,':') != NULL) { /* we are given a range */
					args->start_lba = (OFF_T) strtoul(optarg, &leftovers, 0);
					if (leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */
						args->start_lba <<= 10;
						leftovers++;  /* at the ':' */
					} else if (leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */
						args->start_lba *= 1000;
						leftovers++;  /* at the ':' */
					} else if (leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */
						args->start_lba <<= 20;
						leftovers++;  /* at the ':' */
					} else if (leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */
						args->start_lba *= 1000000;
						leftovers++;  /* at the ':' */
					} else if (leftovers == strchr(leftovers,'g')) { /* multiply by 2^30 */
						args->start_lba <<= 30;
						leftovers++;  /* at the ':' */
					} else if (leftovers == strchr(leftovers,'G')) { /* multiply by 10^9 */
						args->start_lba *= 1000000000;
						leftovers++;  /* at the ':' */
					}
					leftovers++;  /* should be at the next value */
					if (!isdigit((int) leftovers[0])) {
						pMsg(WARN, args, "-%c second argument is non numeric.\n", c);
						return(-1);
					}
					args->stop_lba = (OFF_T) strtoul(leftovers, &leftovers, 0);
					if (leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */
						args->stop_lba <<= 10;
					} else if (leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */
						args->stop_lba *= 1000;
					} else if (leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */
						args->stop_lba <<= 20;
					} else if (leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */
						args->stop_lba *= 1000000;
					} else if (leftovers == strchr(leftovers,'g')) { /* multiply by 2^30 */
						args->stop_lba <<= 30;
					} else if (leftovers == strchr(leftovers,'G')) { /* multiply by 10^9 */
						args->stop_lba *= 1000000000;
					}
				} else { /* only a single value given */
					args->start_lba = (OFF_T) strtoul(optarg, &leftovers, 0);
					if (leftovers == strchr(leftovers,'k')) { /* multiply by 2^10 */
						args->start_lba <<= 10;
					} else if (leftovers == strchr(leftovers,'K')) { /* multiply 10^3 */
						args->start_lba *= 1000;
					} else if (leftovers == strchr(leftovers,'m')) { /* multiply by 2^20 */
						args->start_lba <<= 20;
					} else if (leftovers == strchr(leftovers,'M')) { /* multiply by 10^6 */
						args->start_lba *= 1000000;
					} else if (leftovers == strchr(leftovers,'g')) { /* multiply by 2^30 */
						args->start_lba <<= 30;
					} else if (leftovers == strchr(leftovers,'G')) { /* multiply by 10^9 */
						args->start_lba *= 1000000000;
					}
				}
				break;
			case '?' :
			default  :
				usage();
				return(-1);
		}
	}
	if (argv[optind] == NULL) {
		pMsg(WARN, args, "Unspecified target.\n");
		return(-1);
	}
	strncpy(args->device, argv[optind], (DEV_NAME_LEN-1));
	return 0;
}
Ejemplo n.º 27
0
void AudioDecoderThread::pushEOF()
{
    VideoMsgPtr pMsg(new VideoMsg());
    pMsg->setEOF();
    m_MsgQ.push(pMsg);
}
Ejemplo n.º 28
0
void AudioDecoderThread::pushSeekDone(float time, int seqNum)
{
    VideoMsgPtr pMsg(new VideoMsg());
    pMsg->setSeekDone(seqNum, time);
    m_MsgQ.push(pMsg);
}
Ejemplo n.º 29
0
void AudioDecoderThread::pushAudioMsg(AudioBufferPtr pBuffer, float time)
{
    VideoMsgPtr pMsg(new VideoMsg());
    pMsg->setAudio(pBuffer, time);
    m_MsgQ.push(pMsg);
}
Ejemplo n.º 30
0
Archivo: timer.c Proyecto: 1587/ltp
void *ChildTimer(void *vtest)
#endif
{
#ifndef WINDOWS
	test_ll_t *test = (test_ll_t *) vtest;
#endif
	time_t ioTimeoutCount = 0;
	time_t total_time = 0;
	OFF_T cur_total_io_count = 0;
	OFF_T last_total_io_count = 0;

	OFF_T tmp_io_count = 0;
	time_t run_time = 0;

	lvl_t msg_level = WARN;

	child_args_t *args = test->args;
	test_env_t *env = test->env;

	extern int signal_action;
	extern unsigned short glb_run;

#ifdef _DEBUG
	PDBG3(DBUG, args, "In timer %lu, %d\n", time(NULL), env->bContinue);
#endif
	do {
		Sleep(1000);
		run_time++;
#ifdef _DEBUG
		PDBG3(DBUG, args, "Continue timing %lu, %lu, %d\n", time(NULL),
		      run_time, env->bContinue);
#endif
		if (args->flags & CLD_FLG_W) {
			if ((args->flags & CLD_FLG_LINEAR)
			    && !(args->flags & CLD_FLG_NTRLVD)) {
				if (TST_OPER(args->test_state) == WRITER) {
					env->hbeat_stats.wtime++;
				}
			} else {
				env->hbeat_stats.wtime++;
			}
		}
		if (args->flags & CLD_FLG_R) {
			if ((args->flags & CLD_FLG_LINEAR)
			    && !(args->flags & CLD_FLG_NTRLVD)) {
				if (TST_OPER(args->test_state) == READER) {
					env->hbeat_stats.rtime++;
				}
			} else {
				env->hbeat_stats.rtime++;
			}
		}

		/*
		 * Check to see if we have made any IO progress in the last interval,
		 * if not incremment the ioTimeout timer, otherwise, clear it
		 */
		cur_total_io_count = env->global_stats.wcount
		    + env->cycle_stats.wcount
		    + env->hbeat_stats.wcount
		    + env->global_stats.rcount
		    + env->cycle_stats.rcount + env->hbeat_stats.rcount;

		if (cur_total_io_count == 0) {
			tmp_io_count = 1;
		} else {
			tmp_io_count = cur_total_io_count;
		}

		total_time = env->global_stats.rtime
		    + env->cycle_stats.rtime
		    + env->hbeat_stats.rtime
		    + env->global_stats.wtime
		    + env->cycle_stats.wtime + env->hbeat_stats.wtime;

#ifdef _DEBUG
		PDBG3(DBUG, args, "average number of seconds per IO: %0.8lf\n",
		      ((double)(total_time) / (double)(tmp_io_count)));
#endif

		if (cur_total_io_count == last_total_io_count) {	/* no IOs completed in interval */
			if (0 == (++ioTimeoutCount % args->ioTimeout)) {	/* no progress after modulo ioTimeout interval */
				if (args->flags & CLD_FLG_TMO_ERROR) {
					args->test_state =
					    SET_STS_FAIL(args->test_state);
					env->bContinue = FALSE;
					msg_level = ERR;
				}
				pMsg(msg_level, args,
				     "Possible IO hang condition, IO timeout reached, %lu seconds\n",
				     args->ioTimeout);
			}
#ifdef _DEBUG
			PDBG3(DBUG, args, "io timeout count: %lu\n",
			      ioTimeoutCount);
#endif
		} else {
			ioTimeoutCount = 0;
			last_total_io_count = cur_total_io_count;
#ifdef _DEBUG
			PDBG3(DBUG, args, "io timeout reset\n");
#endif
		}

		if (((args->hbeat > 0) && ((run_time % args->hbeat) == 0))
		    || (signal_action & SIGNAL_STAT)) {
			print_stats(args, env, HBEAT);
			update_cyc_stats(env);
			clear_stat_signal();
		}

		if (glb_run == 0) {
			break;
		}		/* global run flag cleared */
		if (signal_action & SIGNAL_STOP) {
			break;
		}
		/* user request to stop */
		if (args->flags & CLD_FLG_TMD) {	/* if timing */
			if (run_time >= args->run_time) {	/* and run time exceeded */
				break;
			}
		} else {	/* if not timing */
			if (env->kids <= 1) {	/* and the timer is the only child */
				break;
			}
		}
	} while (TRUE);
#ifdef _DEBUG
	PDBG3(DBUG, args, "Out of timer %lu, %lu, %d, %d\n", time(NULL),
	      run_time, env->bContinue, env->kids);
#endif

	if (args->flags & CLD_FLG_TMD) {	/* timed test, timer exit needs to stop io threads */
#ifdef _DEBUG
		PDBG3(DBUG, args,
		      "Setting bContinue to FALSE, timed test & timer exit\n");
#endif
		env->bContinue = FALSE;
	}

	TEXIT((uintptr_t) GETLASTERROR());
}