void stop_engine(engine_t e) { assert(e); /* mutex_lock(e->mtx); e->status = 0; //强制唤醒所有等待在完成队列上的线程 struct block_queue *queue = 0; /*唤醒所有等待在完成队列的线程* / while(queue = LIST_POP(struct block_queue *,e->block_thread_queue)) { BLOCK_QUEUE_FORCE_WAKEUP(queue); } mutex_unlock(e->mtx); */ mutex_lock(e->mtx); e->status = 0; //强制唤醒所有等待在完成队列上的线程 MsgQueue_t msgQ = 0; /*唤醒所有等待在完成队列的线程*/ while(msgQ = LIST_POP(MsgQueue_t,e->block_thread_queue)) { //发送一个0消息 void *tmp = 0; PutMsg(msgQ,&tmp,sizeof(tmp)); } mutex_unlock(e->mtx); }
int put_event(engine_t e,st_io *io) { assert(e); assert(io); /* mutex_lock(e->mtx); struct block_queue *EventQ = LIST_POP(struct block_queue*,e->block_thread_queue); if(!EventQ) { //没有等待的线程,先缓冲事件 LIST_PUSH_BACK(e->buffering_event_queue,io); io = 0; } mutex_unlock(e->mtx); if(io) BLOCK_QUEUE_PUSH(EventQ,io); */ //printf("putevent\n"); mutex_lock(e->mtx); MsgQueue_t msgQ = LIST_POP(MsgQueue_t,e->block_thread_queue); if(!msgQ) { //没有等待的线程,先缓冲事件 LIST_PUSH_BACK(e->buffering_event_queue,io); io = 0; } mutex_unlock(e->mtx); if(io) PutMsg(msgQ,&io,sizeof(io)); return 0; }
wpacket_t wpacket_create_by_rpacket(struct rpacket *r) { wpacket_t w = LIST_POP(wpacket_t,g_wpacket_pool);//calloc(1,sizeof(*w)); if(!w) { printf("缓存不够了\n"); getchar(); exit(0); } //wpacket_t w = calloc(1,sizeof(*w)); w->raw = r->raw; w->factor = 0; w->writebuf = 0; w->begin_pos = r->begin_pos; w->buf = buffer_acquire(0,r->buf); w->len = 0;//触发拷贝之前len没有作用 w->wpos = 0; if(w->raw) w->data_size = r->len; else w->data_size = r->len + sizeof(r->len); return w; }
wpacket_t wpacket_create(uint32_t size,uint8_t is_raw) { uint8_t k = GetK(size); wpacket_t w; size = 1 << k; w = LIST_POP(wpacket_t,g_wpacket_pool);//calloc(1,sizeof(*w)); if(!w) { printf("缓存不够了\n"); getchar(); exit(0); } //w = calloc(1,sizeof(*w)); w->factor = k; w->raw = is_raw; w->buf = buffer_create_and_acquire(0,size); w->writebuf = buffer_acquire(0,w->buf); w->begin_pos = 0; if(is_raw) { w->wpos = 0; w->len = 0; w->buf->size = 0; w->data_size = 0; } else { w->wpos = sizeof(w->len); w->len = (uint32_t*)w->buf->buf; *(w->len) = 0; w->buf->size = sizeof(w->len); w->data_size = sizeof(*(w->len)); } return w; }