コード例 #1
0
ファイル: worker.c プロジェクト: WindyCitySDR/uctimscharging
/**
 * Destroys the worker structures. 
 */
void worker_destroy()
{
	int i;
//	LOG(L_CRIT,"-1-\n");
/*	lock_get(tasks->lock);*/
	for(i=0;i<tasks->max;i++){
		if (tasks->queue[i].msg) AAAFreeMessage(&(tasks->queue[i].msg));
	}
//	LOG(L_CRIT,"-2-\n");	
	shm_free(tasks->queue);
	lock_destroy(tasks->lock);
	lock_dealloc((void*)tasks->lock);
//	LOG(L_CRIT,"-3-\n");	
	
	//lock_release(tasks->empty);
	semctl(tasks->empty, 0, IPC_RMID, cdp_semun_destroy);
//	LOG(L_CRIT,"-4-\n");	
	
	semctl(tasks->full, 0, IPC_RMID, cdp_semun_destroy);
	
	shm_free(tasks);
	
	while(callbacks->head)
		cb_remove(callbacks->head);
	shm_free(callbacks);
}
コード例 #2
0
ファイル: worker.c プロジェクト: Gaoithe/openimscore_ims
/**
 * Destroys the worker structures. 
 */
void worker_destroy()
{
	int i,sval=0;
	if (callbacks){
		while(callbacks->head)
			cb_remove(callbacks->head);
		shm_free(callbacks);
	}

	// to deny runing the poison queue again
	config->workers = 0;
	if (tasks) {
	//	LOG(L_CRIT,"-1-\n");
		lock_get(tasks->lock);
		for(i=0;i<tasks->max;i++){
			if (tasks->queue[i].msg) AAAFreeMessage(&(tasks->queue[i].msg));
			tasks->queue[i].msg = 0;
			tasks->queue[i].p = 0;
		}
		lock_release(tasks->lock);

		LOG(L_INFO,"Unlocking workers waiting on empty queue...\n");
		for(i=0;i<config->workers;i++)
			sem_release(tasks->empty);
		LOG(L_INFO,"Unlocking workers waiting on full queue...\n");
		i=0;
		while(sem_getvalue(tasks->full,&sval)==0)			
			if (sval<=0) {
				sem_release(tasks->full);
				i=1;
			}
			else break;
		sleep(i);
		
		lock_get(tasks->lock);
	//	LOG(L_CRIT,"-2-\n");	
		shm_free(tasks->queue);
		lock_destroy(tasks->lock);
		lock_dealloc((void*)tasks->lock);
	//	LOG(L_CRIT,"-3-\n");	
		
		//lock_release(tasks->empty);
		sem_free(tasks->full);
		sem_free(tasks->empty);
		
		shm_free(tasks);
	}
}
コード例 #3
0
int main(int arg, char** argv) {

    sbinder_start();

    int ret;

    ret = cb_add(_cb_callback);
    printf("main 1ret = %d\n",ret);

    ret = cb_add(_cb_callback1);
    printf("main 2ret = %d\n",ret);

    ret = cb_invoke(10);
    printf("main 3ret = %d\n",ret);

    sleep(5);

    ret = cb_invoke(11);
    printf("main 4ret = %d\n",ret);

    sleep(5);

    ret = cb_remove(_cb_callback1);
    printf("main 5ret = %d\n",ret);


	startThread(13);
    printf("main 6ret = %d\n",ret);
	startThread(14);
    printf("main 7ret = %d\n",ret);
	startThread(15);
    printf("main 8ret = %d\n",ret);
	startThread(16);
    printf("main 9ret = %d\n",ret);
	startThread(17);
    printf("main 10ret = %d\n",ret);

    ret = cb_invoke(12);
    printf("main 11ret = %d\n",ret);

    return sbinder_serv();
}