int main() { int data[LOOP]; int i, res; int* p; struct slist_t* sl; sl = slist_init(); assert(sl); for (i = 0; i < LOOP; ++ i) { data[i] = rand() % LOOP; res = slist_push_front(sl, &data[i]); assert(0 == res); res = slist_push_back(sl, &data[i]); assert(0 == res); } printf("list count=%d\n", slist_count(sl)); for (i = LOOP-1; i >= 0; -- i) { res = slist_find(sl, &data[i]); assert(0 == res); p = slist_pop_front(sl); assert(p == &data[i]); p = slist_pop_back(sl); assert(p == &data[i]); res = slist_find(sl, &data[i]); assert(res < 0); } printf("list count=%d\n", slist_count(sl)); slist_release(sl); sl = 0; return 0; }
void epoll_release(struct reactor_t* reactor) { if (reactor && reactor->data) { epoll_t* epoll = (epoll_t*)(reactor->data); slist_release(epoll->expired); close(epoll->epoll_fd); epoll->epoll_fd = -1; FREE(epoll); reactor->data = 0; reactor->name = NULL; } }
void curlp_release(curlp_t* cp) { if (cp) { if (cp->free_list) { slist_release(cp->free_list); } if (cp->clients) { hash_loop(cp->clients, _curl_loop_release, cp); hash_release(cp->clients); } if (cp->mhandle) { curl_multi_cleanup(cp->mhandle); cp->mhandle = NULL; } FREE(cp); } }
int test_base_slist(const char* param) { struct slist_t* sl = slist_create(); if (!sl) { fprintf(stderr, "slist create fail\n"); return -1; } rand_seed(time(NULL)); int loop = param ? atoi(param) : 32; int data[loop]; for (int i = 0; i < loop; ++ i) { data[i] = (int)(rand_gen()) % loop; int res = slist_push_front(sl, &data[i]); CHECK(sl, res == 0, "slist push front fail"); res = slist_push_back(sl, &data[i]); CHECK(sl, res == 0, "slist push back fail"); } CHECK(sl, slist_size(sl) == 2 * loop, "slist size fail"); for (int i = loop - 1; i >= 0; -- i) { int res = slist_find(sl, &data[i]); CHECK(sl, res == 0, "slist find fail"); void* p = slist_pop_front(sl); CHECK(sl, p == &data[i], "slist pop front fail"); p = slist_pop_back(sl); CHECK(sl, p == &data[i], "slist pop back fail"); res = slist_find(sl, &data[i]); CHECK(sl, res < 0, "slist find fail"); } CHECK(sl, slist_size(sl) == 0, "slist size fail"); slist_release(sl); return 0; }
curl_pool_t* curl_pool_init() { int32_t i = 0; struct curl_client_t* cc = NULL; curl_pool_t* cp = (curl_pool_t*)MALLOC(sizeof(*cp)); if (!cp) goto CURL_FAIL; memset(cp, 0, sizeof(*cp)); cp->size = CURL_POOL_DEFAULT_SIZE; cp->free_list = slist_init(); if (!cp->free_list) goto CURL_FAIL1; cp->clients = hash_init(_curl_pool_hash, _curl_pool_cmp, cp->size * 13); if (!cp->clients) goto CURL_FAIL2; cp->mhandle = curl_multi_init(); if (!cp->mhandle) goto CURL_FAIL3; // pre allocate client for (i = 0; i < cp->size; ++ i) { cc = curl_client_init(); if (cc) { slist_push_front(cp->free_list, cc); hash_insert(cp->clients, cc); } } return cp; CURL_FAIL3: hash_release(cp->clients); CURL_FAIL2: slist_release(cp->free_list); CURL_FAIL1: FREE(cp); CURL_FAIL: return NULL; }
static void slist_setlist(t_slist *x,t_symbol *s) { slist_release(x->x_c); x->x_c = slist_get(s); }
static void slist_ff(t_slist *x) { slist_release(x->x_c); }