예제 #1
0
파일: cache.c 프로젝트: faissaloo/wakaba
void cache_pop(struct lnode *n)
{
	struct cache_entry *ce = n->data;
	free(ce->data);
	free(ce);
	if (n == cache_list)
		cache_list = cache_list->next;
	free(lnode_pop(n));
}
예제 #2
0
파일: cache.c 프로젝트: faissaloo/wakaba
void cache_bump(struct lnode *n)
{
	if (n == cache_list)
		return;

	pthread_mutex_lock(&lock);
	lnode_pop(n);
	cache_list = lnode_push(cache_list, n);
	pthread_mutex_unlock(&lock);
}
예제 #3
0
파일: database.c 프로젝트: sora-chan/wakaba
void database_pop(struct lnode *node)
{
	pthread_mutex_lock(&lock);

	free(node->data);
	if (node == file_list)
		file_list = file_list->next;
	free(lnode_pop(node));

	pthread_mutex_unlock(&lock);
}
예제 #4
0
파일: socket.c 프로젝트: faissaloo/wakaba
struct client_ctx *queue_pop()
{
	pthread_mutex_lock(&avail_lock);

	if (!client_queue)
		pthread_cond_wait(&avail_cond, &avail_lock);

	struct lnode *n = lnode_pop(listend(client_queue));
	struct client_ctx *cc = n->data;
	queue_size--;
	free(n);

	if (n == client_queue)
		client_queue = 0;

	pthread_mutex_unlock(&avail_lock);

	return cc;
}