示例#1
0
文件: cache.c 项目: yuyang0/yaspider
void *cache_malloc(cache_head_t *cache)
{
	cache_node_t *a_node;
	queue_t *queue;
	if (!queue_empty(&cache->free_que))
	{
		queue = queue_next(&cache->free_que);
		queue_remove(queue);
		a_node = queue_data(queue, cache_node_t, next);
		queue_insert_head(&cache->used_que, queue);

		cache->nr_used++;
		cache->nr_free--;
        /*set the memory to zero*/
		memset(a_node->data, 0, cache->size);
		return a_node->data;
	}
	else
	{
		size_t len = cache->size + sizeof(cache_node_t);
		a_node = Malloc(len);
		queue_insert_head(&cache->used_que, &a_node->next);
		a_node->data = (void *)(a_node+1);
		/*set the memory to zero*/
		memset(a_node->data, 0, cache->size);
		cache->nr_used++;

		return a_node->data;
	}
}
示例#2
0
文件: http.c 项目: whtc123/mysource
void httproute_callback_add(HttpServer *server,char *path,HttpRouteCallback func,void *arg)
{
	HttpRoute *route=NULL;
	route = malloc(sizeof(HttpRoute));
	route->path=strdup(path);
	route->func=func;
	route->arg=arg;
	queue_insert_head(&server->routes, &route->node);
}
示例#3
0
文件: http.c 项目: whtc123/mysource
static HttpSession *httpserver_session_new(HttpServer *server,int fd)
{
	HttpSession *session=NULL;
	session=malloc(sizeof(HttpSession));
	bzero(session,sizeof(HttpSession) );
	queue_init(&session->request.headers);
	session->fd=fd;
	session->server=server;
	session->request.buff=buff_new(1024,0);
	session->ev=event_fd_new( fd, EPOLLIN, httpsession_read, session);
	session->request.prase_status=HPARSE_FIRST_LINE;
	queue_insert_head(&server->sessions,&session->node);
	return session;
}
示例#4
0
文件: cache.c 项目: yuyang0/yaspider
void cache_free(cache_head_t *cache, void *data)
{
	cache_node_t *a_node = data - sizeof(cache_node_t);
	queue_remove(&a_node->next);
	/*too many free cache objects? free it */
	if (cache->nr_free >= MAX_FREE_CACHES)
	{
		Free (a_node);
		cache->nr_used--;
		return;
	}
	queue_insert_head(&cache->free_que, &a_node->next);

	cache->nr_used--;
	cache->nr_free++;
}
示例#5
0
文件: fast_queue.c 项目: yylq/lolib
/* the stable insertion sort */
void
queue_sort(queue_t *queue,
    int (*cmp)(const queue_t *, const queue_t *))
{
    queue_t  *q, *prev, *next;

    q = queue_head(queue);
    if (q == queue_tail(queue)) {
        return;
    }
    for (q = queue_next(q); q != queue_sentinel(queue); q = next) {
        prev = queue_prev(q);
        next = queue_next(q);
        queue_remove(q);
        do {
            if (cmp(prev, q) <= 0) {
                break;
            }
            prev = queue_prev(prev);
        } while (prev != queue_sentinel(queue));
        queue_insert_head(prev, q);
    }
}
示例#6
0
文件: uvc.c 项目: whtc123/libuvc
channel_t channel_select(int need_default,char *fmt,...){
	va_list argp;
	int cnt = strlen(fmt);
	queue_t select_node[HEAP_SELECT_CNT];
	channel_t channels[HEAP_SELECT_CNT];
	channel *chan=NULL;
	uvc_ctx *ctx=uvc_self();
	channel_t c;
	int i = 0;
	if (cnt < 0)return -1;
	
	va_start(argp, fmt);
	for (i = 0; i<cnt; i++)
	{
		c = va_arg(argp, channel_t);
		channels[i] = c;
		select_node[i].ext = ctx;
		if (fmt[i] == 'r' && channel_readable(c)){
			return c;
		}
		else if (fmt[i] == 'w' && channel_writeable(c)){
			return c;
		}
		else if (fmt[i] != 'w' && fmt[i] != 'r'){
			abort();
		}
	}
	va_end(argp);
	if (need_default){
		return -1;
	}
   
	for(i=0;i<cnt;i++)
	{
		c = channels[i];

	    if(fmt[i]=='r' ){
			chan = channel_pool_get(get_chan_pool(), c);
			queue_insert_head(&chan->readq, &select_node[i]);
	    }
	    else if(fmt[i]=='w'){
			chan = channel_pool_get(get_chan_pool(), c);
			queue_insert_head(&chan->writq, &select_node[i]);
		}else if(fmt[i] != 'w' && fmt[i] != 'r'){
			abort();
	    }
	}
	uvc_yield();
	c = 0;
	for (i = 0; i < cnt; i++)
	{
			
		if (fmt[i] == 'r' && channel_readable(channels[i])){
			assert(c == 0);
			c = channels[i];
		}
		else if (fmt[i] == 'w' && channel_writeable(channels[i])){
			assert(c == 0);
			c = channels[i];
		}
		else{
			queue_remove(&select_node[i]);
		}
	}
	assert(c != 0);
	//assert("won't be run here :\n");


    return c;    
}
示例#7
0
文件: uvc.c 项目: whtc123/libuvc
static void channel_queue_put(queue_t *q, uvc_ctx *ctx){
	queue_insert_head(q, &ctx->i_node);
}
示例#8
0
文件: uvc.c 项目: whtc123/libuvc
void uvc_ready(uvc_ctx *ctx){
	if (ctx){
		uvc_thread_env *env = uvc_get_env();
		queue_insert_head(&env->ready_queue, &ctx->task_node);
	}
}
示例#9
0
文件: uvc.c 项目: whtc123/libuvc
void uvc_io_ready(uvc_ctx *ctx){
	uvc_thread_env *env = uvc_get_env();
	queue_insert_head(&env->ready_queue, &ctx->task_node);
	YIELD(env);;
}