Esempio n. 1
0
/* virtual */ SysStatusUval
FileLinuxFile::readv(struct iovec* vec, uval vecCount,
		     ThreadWait **tw, GenState &moreAvail)
{
    FLFDEBUG("readv");

    SysStatusUval rc;
    uval length_read;
    char* buf_read;
    uval length = vecLength(vec,vecCount);
    lock();
    moreAvail.state = FileLinux::READ_AVAIL|FileLinux::WRITE_AVAIL;
    rc = locked_readAlloc(length, buf_read, tw);
    if (_FAILURE(rc)) {
	unLock();
	//semantics shift from EOF error to 0 length on EOF
	if (_SCLSCD(rc) == FileLinux::EndOfFile) {
	    moreAvail.state = FileLinux::ENDOFFILE;
	    return 0;
	}
	return rc;
    }
    length_read = _SGETUVAL(rc);
    if (length_read) {
	memcpy_toiovec(vec, buf_read, vecCount, length_read);
	locked_readFree(buf_read);
    }
    unLock();
    return rc;
}
Esempio n. 2
0
/* virtual */ SysStatusUval
FileLinuxFile::writev(const struct iovec *vec, uval vecCount,
		      ThreadWait **tw, GenState &moreAvail)
{
    FLFDEBUG("writev");

    SysStatusUval rc;
    uval length_write;
    char* buf_write;
    uval length = vecLength(vec, vecCount);

    lock();
    moreAvail.state = FileLinux::READ_AVAIL|FileLinux::WRITE_AVAIL;

    rc = locked_writeAlloc(length, buf_write, tw);
    if (_FAILURE(rc)) {
	unLock();
	return rc;
    }
    length_write = _SGETUVAL(rc);
    if (length_write) {
	memcpy_fromiovec(buf_write, vec, vecCount, length_write);
	locked_writeFree(buf_write);
    }
    unLock();
    return rc;
}
Esempio n. 3
0
void JobAf::deleteNode( RenderContainer * renders, MonitorContainer * monitoring)
{
	if( m_id == AFJOB::SYSJOB_ID )
	{
		AFCommon::QueueLogError("System job can't be zombie");
		return;
	}
	
	if( m_deletion == false )
	{
		m_state = AFJOB::STATE_OFFLINE_MASK;
		lock();
		m_deletion = true;
		
		if( m_custom_data.size() || m_user->getCustomData().size())
		{
			std::vector<std::string> events;
			events.push_back("JOB_DELETED");
			emitEvents(events);
		}
		
		if( getRunningTasksNumber() && (renders != NULL) && (monitoring != NULL))
		{
			restartAllTasks("Job deletion.", renders, monitoring, AFJOB::STATE_RUNNING_MASK);
			if( monitoring ) monitoring->addJobEvent( af::Monitor::EVT_jobs_change, getId(), getUid());
			return;
		}
	}
	if( getRunningTasksNumber() )
	{
		AF_ERR << "runningtaskscounter = " << getRunningTasksNumber();
		return;
	}
	
	if( false == m_command_post.empty())
	{
		SysJob::AddPostCommand( m_command_post, m_blocks_num > 0 ? m_blocks_data[0]->getWDir(): "", m_user_name, m_name);
		appendLog( std::string("Executing job post command:\n") + m_command_post);
	}
	for( int b = 0; b < m_blocks_num; b++)
	{
		if( m_blocks_data[b]->hasCmdPost())
		{
			SysJob::AddPostCommand( m_blocks_data[b]->getCmdPost(), m_blocks_data[b]->getWDir(), m_user_name, m_name);
			appendLog( std::string("Executing block[") + m_blocks_data[b]->getName() + "] post command:\n" + m_blocks_data[b]->getCmdPost());
		}
	}
	
	setZombie();
	
	AFCommon::DBAddJob( this);
	
	if( monitoring ) monitoring->addJobEvent( af::Monitor::EVT_jobs_del, getId(), getUid());
	AFCommon::QueueLog("Deleting a job: " + v_generateInfoString());
	unLock();
}
Esempio n. 4
0
void SocketUser::Close()
{
	unLock();
	if( mSocket ) {
		mSocket->CloseChennel();
		delete mSocket;
		HubUser::Close();
	}
	mSocket = NULL;
}
Esempio n. 5
0
void MSLogEx(MS_LOG_LEVEL level,const char *logStr, ...)
{
	lock(&(g_MSLog.lock));
	char msg[2048] = "\0";
	va_list varArg;

	//firstly check the current line's level with g_MSLog.level
	if (level > g_MSLog.level)
	{
		unLock(&(g_MSLog.lock));
		return;
	}

	memset(msg,0,sizeof(msg));
	va_start(varArg, logStr);
	MSVsnprintf(msg, sizeof(msg), logStr, varArg);
	va_end(varArg);
	g_MSLog.logCB(g_MSLog.type,msg,strlen(msg));
	unLock(&(g_MSLog.lock));
}
Esempio n. 6
0
/* virtual */ SysStatusUval
FileLinuxPacket::destroy()
{
    lock();
    if (remote) {
	freeGlobal(remote,remoteLen);
	remote = NULL;
	remoteLen = 0;
    }
    if (local) {
	freeGlobal(local,localLen);
	local = NULL;
	localLen = 0;
    }
    unLock();
    return FileLinuxStream::destroy();		// no special state
}
Esempio n. 7
0
/* virtual */ SysStatusUval
FileLinuxFile::pread(const char *buf, uval nbytes, uval offset)
{
    FLFDEBUG("readv");

    SysStatusUval rc, rcret;
    char* buf_read;

    lock();

    // retrieve and save current position
    if (buffer == NULL) locked_initBuffer(uval(~0));
    rc = buffer->setFilePosition(0, FileLinux::RELATIVE);
    _IF_FAILURE_RET(rc);
    uval savedOffset = _SGETUVAL(rc);
    rc = buffer->setFilePosition(offset, FileLinux::ABSOLUTE);
    // tassertMsg only because it didn't fail on the first call, it should
    // work now
    tassertMsg(_SUCCESS(rc), "rc 0x%lx\n", rc);

    rcret = locked_readAlloc(nbytes, buf_read, NULL);

    // restore previous file offset
    rc = buffer->setFilePosition(savedOffset, FileLinux::ABSOLUTE);
    // tassertMsg only because it didn't fail on the first 2 calls, it should
    // work now
    tassertMsg(_SUCCESS(rc), "rc 0x%lx\n", rc);

    // return value from locked_readAlloc
    if (_FAILURE(rcret)) {
	//semantics shift from EOF error to 0 length on EOF
	if (_SCLSCD(rc) == FileLinux::EndOfFile) {
	    rcret = _SRETUVAL(0);
	}
    } else {
	tassertMsg(_SGETUVAL(rcret) > 0, "?");
	memcpy((void*)buf, buf_read, _SGETUVAL(rcret));
	locked_readFree(buf_read);
    }

    unLock();
    return rcret;
}
Esempio n. 8
0
/* virtual */ SysStatusUval
FileLinuxFile::pwrite(const char *buf, uval nbytes, uval offset)
{
    FLFDEBUG("readv");

    SysStatusUval rc, rcret;
    char* buf_write;

    lock();

    // retrieve and save current position
    if (buffer == NULL) locked_initBuffer(uval(~0));
    rc = buffer->setFilePosition(0, FileLinux::RELATIVE);
    _IF_FAILURE_RET(rc);
    uval savedOffset = _SGETUVAL(rc);
    rc = buffer->setFilePosition(offset, FileLinux::ABSOLUTE);
    // tassertMsg only because it didn't fail on the first call, it should
    // work now
    tassertMsg(_SUCCESS(rc), "rc 0x%lx\n", rc);

    rcret = locked_writeAlloc(nbytes, buf_write, NULL);

    // restore previous file offset
    rc = buffer->setFilePosition(savedOffset, FileLinux::ABSOLUTE);
    // tassertMsg only because it didn't fail on the first 2 calls, it should
    // work now
    tassertMsg(_SUCCESS(rc), "rc 0x%lx\n", rc);

    if (_SUCCESS(rcret)) {
	uval length_write = _SGETUVAL(rcret);
	if (length_write) {
	    memcpy(buf_write, (void*)buf, length_write);
	    locked_writeFree(buf_write);
	}
    }

    unLock();
    return rcret;
}
Esempio n. 9
0
void *thread_main(void *arg)
{
    int n, buflen;
    char tmp;
    char buffer[BUFSIZE];
    wiringPiSetup();

    /* INIT */
    pinMode(PIN, OUTPUT);
    digitalWrite(PIN,LOW);
    softPwmCreate(PIN, 0, 200);
    
    /* UN-LOCK */
    unLock();

    printf("LOCKER ID : %s\n", sl_iot_id);
    printf("Smart Locker IoT : Start.\n");

    do
    {
        n = read(sock, &tmp, 1);
        if (n < 0) 
            error("ERROR reading from socket");

        if (tmp != '\x2')
            continue;

        buflen = 0;

        do
        {
            n = read(sock, &tmp, 1);
            if (n < 0) 
                error("ERROR reading from socket");

            if (tmp == '\x3')
                break;

            // TODO: if the buffer's capacity has been reached, either reallocate the buffer with a larger size, or fail the operation...
            buffer[buflen] = tmp;
            ++buflen;
        }
        while (1);

        char data_buffer[10][30];
        char* token = NULL;
        char tok[]  =  "{},:\"";

        token = strtok(buffer, tok);
        int i = 0;
        while (token != NULL)
        {
            strcpy(data_buffer[i], token);
            token = strtok(NULL, tok);
            i++;
        }   

        if(!strcmp(sl_iot_id, data_buffer[5]))
        {
            lock();
            printf("SMART LOCKER - STATE : LOCK\n");
            data_buffer[5][0] = '\0';
        }

        //printf("%*.*s\n", buflen, buflen, buffer);
        //break;
    }
    while (1);

    pthread_exit((void *) 0);
}
Esempio n. 10
0
 ~Mutex(void)
 {
   unLock();
   pthread_mutex_destroy(&_mutex);
 };
Esempio n. 11
0
int main(int argc, char* argv[])
{
	int shmid ;
	char line[128];
	int fd_s, fd_r ;

	//open fifo  12.fifp 21.fifo
	fd_s = open("./12.fifo", O_WRONLY);

	fd_r = open("./21.fifo", O_RDONLY);

	printf("fd_s: %d, fd_r: %d\n", fd_s, fd_r);

	//shm
	shmid = shmget((key_t)1234, sizeof(mem_t), IPC_CREAT|0666);
	if(shmid == -1)
	{
		perror("shmget");
		exit(1);
	}
	pmem_t pm = (pmem_t)shmat(shmid, NULL, 0);

	if((void*)pm == (void*)-1)
	{
		perror("shmat");
		exit(1);
	}
	pm ->m_lock = 1 ;

	pm ->m_unshow = 0 ;


	//select
	fd_set rds ;
	struct timeval tm ;
	int ret ;
	while(1)
	{
		FD_ZERO(&rds);

		FD_SET(0, &rds);

		FD_SET(fd_r, &rds);

		tm.tv_usec = 0 ;
		tm.tv_sec = 5;

		ret = select(1024, &rds, NULL, NULL, &tm);

		if(ret == 0)
		{
			continue ;
		}else if(ret > 0)
		{
			if(FD_ISSET(0, &rds))
			{
				memset(line, 0, 128);
				read(0, line, 127);
				write(fd_s, line, strlen(line));
			}
			if(FD_ISSET(fd_r, &rds ))
			{
				memset(line, 0, 128);
				read(fd_r, line, 127);

				Lock(pm);
				while( pm -> m_unshow == 1)
				{
					unLock(pm);
					sleep(1);

					Lock(pm);
				}

				strcpy(pm ->m_buf, line);

				pm ->m_unshow = 1 ;

				unLock(pm);
			}
		}





	}


	close(fd_s);
	close(fd_r);
	shmdt(pm);

	shmctl(shmid, IPC_RMID, NULL);


	return 0 ;
}
Esempio n. 12
0
void Login::compare(const QByteArray &input, const QByteArray &passcode) {
	if (_generator.hash(input, QCryptographicHash::Sha3_512) == passcode) emit unLock();
}