static ACL_FIFO *mail_addr_add(ACL_FIFO *addr_list, const char *addr) { MAIL_ADDR *mail_addr; if (addr_list == NULL) addr_list = acl_fifo_new(); mail_addr = (MAIL_ADDR*) acl_mycalloc(1, sizeof(MAIL_ADDR)); mail_addr->addr = acl_mystrdup(addr); acl_fifo_push(addr_list, mail_addr); return (addr_list); }
FILE_CACHE *file_cache_new(const char *file_path, time_t last_modified) { FILE_CACHE *cache; cache = (FILE_CACHE*) acl_mymalloc(sizeof(FILE_CACHE)); cache->size = 0; http_mkrfc1123(cache->tm_mtime, sizeof(cache->tm_mtime), last_modified); ACL_SAFE_STRNCPY(cache->path, file_path, sizeof(cache->path)); cache->fifo = acl_fifo_new(); (void) acl_htable_enter(__cache_table, file_path, (char*) cache); return (cache); }
void proctl_service_init() { const char *myname = "proctl_service_init"; char ebuf[256]; __services = acl_array_create(10); __services_wait = acl_fifo_new(); acl_pthread_mutex_init(&__mutex_running_service, NULL); acl_pthread_mutex_init(&__mutex_waiting_service, NULL); handles_init(); __sem_handle = CreateSemaphore(NULL, 0, 1024, NULL); if (__sem_handle == NULL) acl_msg_fatal("%s(%d): CreateSemaphore error(%s)", myname, __LINE__, acl_last_strerror(ebuf, sizeof(ebuf))); handles_add(__sem_handle); }
static SERVICE *service_create(ACL_AIO *aio, ACL_FIFO *service_modules, ACL_ARGV *ip_argv) { const char *myname = "service_create"; ACL_FIFO *services; SERVICE *service, *curr_service = NULL; ACL_ITER iter; /* 关闭持续读功能 */ acl_aio_set_keep_read(aio, 0); services = acl_fifo_new(); /* 加载所有的服务模块 */ acl_foreach(iter, service_modules) { MODULE_SERVICE *module = (MODULE_SERVICE*) iter.data; service = module->mod_create(); if (service == NULL) continue; service->aio = aio; service->module = module; service->rw_timeout = 120; service->conn_timeout = 10; service_set_dns(service, aio, var_cfg_dns_list, var_cfg_dns_lookup_timeout, var_cfg_dns_cache_limit, var_cfg_hosts_list); /* 创建连接池缓存对象 */ service->conn_cache = conn_cache_create(aio, var_cfg_server_conn_limit); if (ip_argv) { ACL_ITER iter2; int i = 0; service->bind_ip_list = (char**) acl_mycalloc(ip_argv->argc + 1, sizeof(char*)); service->bind_ip_index = 0; acl_foreach(iter2, ip_argv) { char *ip = (char*) iter2.data; service->bind_ip_list[i++] = acl_mystrdup(ip); } service->bind_ip_list[i] = NULL; } else {