/* 处理来自于监听线程的消息命令的主入口 */ static void proctl_msg_main(void) { const char *myname = "proctl_msg_main"; PROCTL_MSG *msg; LOCK_WAITING_SERVICE; while (1) { msg = acl_fifo_pop(__services_wait); if (msg == NULL) break; switch (msg->msg_type) { case PROCTL_MSG_START: proctl_msg_start(msg); break; default: acl_msg_error("%s(%d): unknown msg type(%d)", myname, __LINE__, msg->msg_type); break; } proctl_msg_free(msg); } UNLOCK_WAITING_SERVICE; }
void file_cache_free(FILE_CACHE *cache) { BUFFER *buffer; acl_htable_delete(__cache_table, cache->path, NULL); while (1) { buffer = (BUFFER*) acl_fifo_pop(cache->fifo); if (buffer == NULL) break; acl_myfree(buffer->buf); acl_myfree(buffer); } acl_fifo_free(cache->fifo, NULL); acl_myfree(cache); }
static void fifo_test(bool use_slice) { ACL_FIFO *fifo; int i; char *ptr; ACL_SLICE_POOL *slice; if (use_slice) slice = acl_slice_pool_create(10, 100, ACL_SLICE_FLAG_GC2 | ACL_SLICE_FLAG_RTGC_OFF); else slice = NULL; fifo = acl_fifo_new1(slice); for (i = 0; i < 20; i++) { if (slice) ptr = (char*) acl_slice_pool_alloc(__FILE__, __LINE__, slice, 100); else ptr = (char*) acl_mymalloc(100); snprintf(ptr, 100, "test:%d", i); (void) acl_fifo_push(fifo, ptr); printf(">>>ptr: %s\n", ptr); } while (1) { ptr = (char*) acl_fifo_pop(fifo); if (ptr == NULL) break; printf("fifo pop: %s\n", ptr); } if (slice == NULL) acl_fifo_free(fifo, acl_myfree_fn); else acl_slice_pool_destroy(slice); }