Example #1
0
static int semaphore_test(pj_pool_t *pool)
{
    pj_sem_t *sem;
    pj_status_t status;

    PJ_LOG(3,("", "...testing semaphore"));

    status = pj_sem_create(pool, NULL, 0, 1, &sem);
    if (status != PJ_SUCCESS) {
	app_perror("...error: pj_sem_create()", status);
	return -151;
    }

    status = pj_sem_post(sem);
    if (status != PJ_SUCCESS) {
	app_perror("...error: pj_sem_post()", status);
	pj_sem_destroy(sem);
	return -153;
    }

    status = pj_sem_trywait(sem);
    if (status != PJ_SUCCESS) {
	app_perror("...error: pj_sem_trywait()", status);
	pj_sem_destroy(sem);
	return -156;
    }

    status = pj_sem_post(sem);
    if (status != PJ_SUCCESS) {
	app_perror("...error: pj_sem_post()", status);
	pj_sem_destroy(sem);
	return -159;
    }

    status = pj_sem_wait(sem);
    if (status != PJ_SUCCESS) {
	app_perror("...error: pj_sem_wait()", status);
	pj_sem_destroy(sem);
	return -161;
    }

    status = pj_sem_destroy(sem);
    if (status != PJ_SUCCESS) {
	app_perror("...error: pj_sem_destroy()", status);
	return -163;
    }

    return 0;
}
Example #2
0
PJ_DEF(pj_status_t) pj_sem_trywait2(pj_sem_t *sem)
{
#if 1
	pj_status_t result;
	uint64_t delay_ms = 1000000;
	dispatch_time_t  delay_t = dispatch_time(DISPATCH_TIME_NOW, delay_ms);
	if(dispatch_semaphore_wait(sem->sem, delay_t)){
		usleep(1000);
		return PJ_RETURN_OS_ERROR(pj_get_native_os_error());
	}else return PJ_SUCCESS;
#else
	pj_status_t st = -1;
	unsigned long start_t, curr_t;
	//uint64_t tstart;
	//struct timespec tstart={0,0}, tend={0,0};
	//clock_serv_t cclock;
    	//clock_gettime(cclock , &tstart);
	struct timeval tstart,tcurr;
	gettimeofday(&tstart, NULL);
	start_t = 1000000*tstart.tv_sec+ tstart.tv_usec;
	while(st = pj_sem_trywait(sem) == -1 ){
		if(errno == EAGAIN){
    			//clock_gettime(cclock, &tend);	
			gettimeofday(&tcurr, NULL);
			curr_t = 1000000*tcurr.tv_sec + tcurr.tv_usec;
			if(curr_t-start_t > 1000) {
				st = -1;
				break;
			} 
			else usleep(10);
		}else{
			st =  -1;
			break;
		}
	}
	return st;
#endif
}
Example #3
0
    //
    // Try wait semaphore.
    //
    pj_status_t trywait()
    {
	return pj_sem_trywait(this->pj_sem_t_());
    }