X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=vss.c;h=73c7231128b94152268b1bc8ea02d1f524b25b6a;hp=fbc35e1a71c8983a5045ff8e0b7bc300f1dfb0ab;hb=e26bd9f391deb1b764fc718cd9c0c2da508a4adb;hpb=17c140cc24838c2b7049e2b4c17621f4284d53dc diff --git a/vss.c b/vss.c index fbc35e1a..73c72311 100644 --- a/vss.c +++ b/vss.c @@ -25,8 +25,8 @@ #include "string.h" #include "afh.h" #include "afs.h" -#include "server.h" #include "net.h" +#include "server.h" #include "list.h" #include "send.h" #include "sched.h" @@ -35,11 +35,6 @@ #include "fd.h" extern struct misc_meta_data *mmd; - -extern void dccp_send_init(struct sender *); -extern void http_send_init(struct sender *); -extern void udp_send_init(struct sender *); - extern const struct sender udp_sender, dccp_sender, http_sender; const struct sender * const senders[] = { &http_sender, &dccp_sender, &udp_sender, NULL}; @@ -283,7 +278,7 @@ static int initialize_fec_client(struct fec_client *fc, struct vss_task *vsst) if (fcp->init_fec) { /* * Set the maximum slice size to the Maximum Packet Size if the - * transport protocol allows to determine this value. The user + * transport protocol allows determination of this value. The user * can specify a slice size up to this value. */ ret = fcp->init_fec(fc->sc); @@ -946,6 +941,7 @@ static int recv_afs_msg(int afs_socket, int *fd, uint32_t *code, uint32_t *data) } #ifndef MAP_POPULATE +/** As of 2018, neither FreeBSD-11.2 nor NetBSD-8.0 have MAP_POPULATE. */ #define MAP_POPULATE 0 #endif @@ -1084,8 +1080,10 @@ static int vss_post_select(struct sched *s, void *context) struct vss_task *vsst = context; ret = task_get_notification(vsst->task); - if (ret < 0) + if (ret < 0) { + afh_free_header(vsst->header_buf, mmd->afd.audio_format_id); return ret; + } if (!vsst->map || vss_next() || vss_paused() || vss_repos()) { /* shut down senders and fec clients */ struct fec_client *fc, *tmp; @@ -1188,3 +1186,20 @@ void vss_init(int afs_socket, struct sched *s) .context = vsst, }, s); } + +/** + * Turn off the virtual streaming system. + * + * This is only executed on exit. It calls the ->shutdowwn method of all senders. + */ +void vss_shutdown(void) +{ + int i; + + FOR_EACH_SENDER(i) { + if (!senders[i]->shutdown) + continue; + PARA_NOTICE_LOG("shutting down %s sender\n", senders[i]->name); + senders[i]->shutdown(); + } +}