Beispiel #1
0
int pool_update_state(pool_proc* dpool, pool_mutex* dpool_mutex) {
	
    int free_n = 0;

    pthread_mutex_lock(&dpool_mutex->mutex);

    for (int i = 0; i < dpool_mutex->processing_n; i++) {
		
        if (dpool[i].status == 0) {
			
            free_n++;
			
		} else if (dpool[i].status == 1) {
			
			if (kill(dpool[i].pid, 0) != 0) {
			
				dpool[i].status=0;
				free_n++;
			
			}
		
		}
		
    }

    if (free_n < N && dpool_mutex->processing_n+M < BACKLOG)
        pool_set(dpool, dpool_mutex);
    else if (free_n > K)
        pool_fit(M, dpool, dpool_mutex);

    pthread_mutex_unlock(&dpool_mutex->mutex);

    return 0;
}
Beispiel #2
0
static cos_inline struct AutoRelease*
pool_get(void)
{
	struct AutoRelease *pool = pthread_getspecific(_pool_key);
	if (pool) return pool;
	 
	pool_set(&_pool0);
	return &_pool0;
}