struct udp_target {
/** Track time (seconds) of last ICMP Port Unreachable error */
time_t last_unreachable;
- /** Common sender client data */
- struct sender_client *sc;
/** The opaque structure returned by vss_add_fec_client(). */
struct fec_client *fc;
/** The FEC parameters for this target. */
static void udp_close_target(struct sender_client *sc)
{
if (sc->cq != NULL) {
- del_close_on_fork_list(sc->fd);
cq_destroy(sc->cq);
sc->cq = NULL;
}
PARA_NOTICE_LOG("deleting %s (%s) from list\n", sc->name, msg);
udp_close_target(sc);
close(sc->fd);
+ del_close_on_fork_list(sc->fd);
vss_del_fec_client(ut->fc);
list_del(&sc->node);
free(sc->name);
{
if (sc->cq == NULL) {
sc->cq = cq_new(UDP_CQ_BYTES);
- add_close_on_fork_list(sc->fd);
PARA_NOTICE_LOG("sending to udp %s\n", sc->name);
}
}
return -E_TARGET_EXISTS;
}
ut = para_calloc(sizeof(*ut));
- sc = ut->sc = para_calloc(sizeof(*sc));
+ sc = para_calloc(sizeof(*sc));
ut->fcp.slices_per_group = scd->slices_per_group;
ut->fcp.data_slices_per_group = scd->data_slices_per_group;
ut->fcp.init_fec = udp_init_fec;
PARA_INFO_LOG("adding to target list (%s)\n", sc->name);
ut->fc = vss_add_fec_client(sc, &ut->fcp);
para_list_add(&sc->node, &targets);
+ add_close_on_fork_list(sc->fd);
return 1;
err:
if (sc->fd >= 0)