void nc_conns_gc(struct net_child_info *nci, bool free_all) { clist *dead = NULL; unsigned int n_gc = 0; /* build list of dead connections */ unsigned int i; for (i = 0; i < nci->conns->len; i++) { struct nc_conn *conn = parr_idx(nci->conns, i); if (free_all || conn->dead) dead = clist_prepend(dead, conn); } /* remove and free dead connections */ clist *tmp = dead; while (tmp) { struct nc_conn *conn = tmp->data; tmp = tmp->next; parr_remove(nci->conns, conn); nc_conn_free(conn); n_gc++; } clist_free(dead); log_debug("net: gc'd %u connections", n_gc); }
static int try_build_part(struct mailimap_body * root_part, struct mailimap_body * part, uint32_t count, clist ** result) { int r; clist * imap_id_list; uint32_t * id; r = recursive_build_path(root_part, part, &imap_id_list); if (r != MAILIMAP_NO_ERROR) return r; id = malloc(sizeof(* id)); if (id == NULL) { clist_free(imap_id_list); return MAILIMAP_ERROR_MEMORY; } * id = count; r = clist_prepend(imap_id_list, id); if (r < 0) { free(id); clist_free(imap_id_list); return MAILIMAP_ERROR_MEMORY; } * result = imap_id_list; return MAILIMAP_NO_ERROR; }
static void __peerman_add(struct peer_manager *peers, struct peer *peer, bool prepend_front) { bn_group(peer->group, &peer->group_len, peer->addr.ip); if (prepend_front) peers->addrlist = clist_prepend(peers->addrlist, peer); else peers->addrlist = clist_append(peers->addrlist, peer); bp_hashtab_put(peers->map_addr, peer->addr.ip, peer); }
static void nc_conns_gc(struct net_child_info *nci, bool free_all) { clist *dead = NULL; unsigned int n_gc = 0; /*nr of dead connections*/ size_t nr_dead = 0; /* build list of dead connections */ unsigned int i; for (i = 0; i < nci->conns->len; i++) { struct nc_conn *conn = parr_idx(nci->conns, i); if (free_all || conn->dead) dead = clist_prepend(dead, conn); } nr_dead = clist_length( dead ); if (nr_dead){ LOG("Nr of dead connections:%d\n", nr_dead); } /* remove and free dead connections */ clist *tmp = dead; while (tmp) { struct nc_conn *conn = tmp->data; tmp = tmp->next; parr_remove(nci->conns, conn); nc_conn_free(conn); n_gc++; } clist_free(dead); if (debugging) fprintf(plog, "net: gc'd %u connections\n", n_gc); }