/*
    Performance test to see how many uncontended
    locks and unlocks can be performed in a given
    timeframe.
*/
void tst_QSystemReadWriteLock::uncontendedLocks()
{
    uint read=0;
    uint write=0;
    uint count=0;
    int millisecs=1000;
    {
        QTime t;
        t.start();
        while(t.elapsed() <millisecs)
        {
            ++count;
        }
    }
    {
        QSystemReadWriteLock rwLock("Viper", QSystemReadWriteLock::Create);
        QTime t;
        t.start();
        while(t.elapsed() <millisecs)
        {
            rwLock.lockForRead();
            rwLock.unlock();
            ++read;
        }
    }
    {
        QSystemReadWriteLock rwLock("Viper", QSystemReadWriteLock::Create);
        QTime t;
        t.start();
        while(t.elapsed() <millisecs)
        {
            rwLock.lockForWrite();
            rwLock.unlock();
            ++write;
        }
    }

    qDebug("during %d millisecs:", millisecs);
    qDebug("counted to %u", count);
    qDebug("%u uncontended read locks/unlocks", read);
    qDebug("%u uncontended write locks/unlocks", write);
}
UpnpWebFileHandle CESContentDirectory_Device_Android::FileOpen(const char *filename,IN enum UpnpOpenFileMode Mode)
{
	int nret = 0;
//	if(strcasecmp(SPECIAL_DEVICE,filename) == 0)
//	{
//		return (UpnpWebFileHandle)m_pSpecialDevice->FileOpen();
//	}
	
	JNIEnv *env = GetJNIEnv();
	jstring jid = env->NewStringUTF(filename);
	jobject jreturn = env->CallObjectMethod(m_jCallback,methIdGetFileInfo,jid);
	if(!jreturn)
	{
		Trace("File not found %s\n",filename);
		nret = -1;
	}
	else
	{
		jstring jrealPath = (jstring)env->GetObjectField(jreturn,MetaDataInfo::jrealPath);
		if(jrealPath)
		{
			icstring realpath = env->GetStringUTFChars(jrealPath,NULL);

			int fd = open(realpath,O_RDONLY);
			if(fd == -1)
			{
				Trace("fail to open %s\n",realpath);
				nret = -1;
			}
			else
			{
				IUpnpUtil::CQuickRWLock rwLock(&m_lock,FALSE);
				m_fileHandleList.push_back(fd);
				nret = fd;
			}

			env->ReleaseStringUTFChars(jrealPath,realpath);
		}
		else
		{
			nret = -1;
		}
	}
	if(jid)
		env->DeleteLocalRef(jid);
	if(jreturn)
		env->DeleteLocalRef(jreturn);

	DetachJNIThread();
	Trace("File opened %d\n",nret);
	return (UpnpWebFileHandle)nret ;

}
Beispiel #3
0
Ticket MessageManager::StartConversation(int socketFD)
{
	Lock lock(&m_endpointsMutex);

	//If the endpoint doesn't exist, then it was closed. Just exit with failure
	if(m_endpoints.count(socketFD) == 0)
	{
		return Ticket();
	}

	Lock rwLock(m_endpoints[socketFD].second, READ_LOCK);
	if(m_endpoints[socketFD].first == NULL)
	{
		return Ticket();
	}

	return Ticket(m_endpoints[socketFD].first->StartConversation(), 0, false, false, socketFD, m_endpoints[socketFD].second);
}