static void shutdown_nci(struct net_child_info *nci) { peerman_free(nci->peers); nc_conns_gc(nci, true); assert(nci->conns->len == 0); parr_free(nci->conns, true); event_base_free(nci->eb); }
struct peer_manager *peerman_read(void *peers_file) { char *filename = peers_file; if (!filename) return NULL; struct peer_manager *peers; peers = peerman_new(); if (!peers) return NULL; int fd = file_seq_open(filename); if (fd < 0) { log_error("peerman: %s: %s", filename, strerror(errno)); goto err_out; } struct p2p_message msg = {}; bool read_ok = true; while (fread_message(fd, &msg, &read_ok)) { if (!peerman_read_rec(peers, &msg)) { log_error("peerman: read record failed"); goto err_out_fd; } } if (!read_ok) { log_error("peerman: read I/O failed"); goto err_out_fd; } free(msg.data); close(fd); return peers; err_out_fd: free(msg.data); close(fd); err_out: peerman_free(peers); return NULL; }
struct peer_manager *peerman_read(void) { char *filename = setting("peers"); if (!filename) return NULL; struct peer_manager *peers; peers = peerman_new(); if (!peers) return NULL; int fd = file_seq_open(filename); if (fd < 0) { perror(filename); goto err_out; } struct p2p_message msg = {}; bool read_ok = true; while (fread_message(fd, &msg, &read_ok)) { if (!peerman_read_rec(peers, &msg)) { fprintf(stderr, "peerman: read record failed\n"); goto err_out; } } if (!read_ok) { fprintf(stderr, "peerman: read I/O failed\n"); goto err_out; } free(msg.data); close(fd); return peers; err_out: peerman_free(peers); return NULL; }