X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=http_send.c;h=59fe2efa0419b0376201b236431fd2ea605273e2;hb=bb899fb1a0c279a2890ff30d11bf7aec50fb92ed;hp=330b45ac1b3ec675a497796be614c07c0bbd9c36;hpb=7e611b37e41f0ec7ec6d3173b7e88ed5b9b3a276;p=paraslash.git diff --git a/http_send.c b/http_send.c index 330b45ac..59fe2efa 100644 --- a/http_send.c +++ b/http_send.c @@ -20,8 +20,8 @@ #include "server.h" #include "http.h" #include "list.h" -#include "send.h" #include "sched.h" +#include "send.h" #include "vss.h" #include "close_on_fork.h" #include "fd.h" @@ -80,6 +80,7 @@ static void http_shutdown(void) { http_shutdown_clients(); generic_acl_deplete(&hss->acl); + free_sender_status(hss); } static int queue_chunk_or_shutdown(struct sender_client *sc, @@ -157,7 +158,7 @@ static void http_send(long unsigned current_chunk, } } -static void http_post_select(fd_set *rfds, __a_unused fd_set *wfds) +static void http_post_select(__a_unused struct sched *s) { struct sender_client *sc, *tmp; struct private_http_sender_data *phsd; @@ -169,7 +170,7 @@ static void http_post_select(fd_set *rfds, __a_unused fd_set *wfds) case HTTP_STREAMING: /* nothing to do */ break; case HTTP_CONNECTED: /* need to recv get request */ - ret = read_pattern(sc->fd, HTTP_GET_MSG, MAXLINE, rfds); + ret = read_pattern(sc->fd, HTTP_GET_MSG, MAXLINE); if (ret < 0) phsd->status = HTTP_INVALID_GET_REQUEST; else if (ret > 0) { @@ -187,7 +188,7 @@ static void http_post_select(fd_set *rfds, __a_unused fd_set *wfds) break; } } - sc = accept_sender_client(hss, rfds); + sc = accept_sender_client(hss); if (!sc) return; phsd = para_malloc(sizeof(*phsd)); @@ -195,7 +196,7 @@ static void http_post_select(fd_set *rfds, __a_unused fd_set *wfds) phsd->status = HTTP_CONNECTED; } -static void http_pre_select(int *max_fileno, fd_set *rfds, fd_set *wfds) +static void http_pre_select(struct sched *s) { struct sender_client *sc, *tmp; unsigned n; @@ -203,15 +204,15 @@ static void http_pre_select(int *max_fileno, fd_set *rfds, fd_set *wfds) FOR_EACH_LISTEN_FD(n, hss) { if (hss->listen_fds[n] < 0) continue; - para_fd_set(hss->listen_fds[n], rfds, max_fileno); + sched_monitor_readfd(hss->listen_fds[n], s); } list_for_each_entry_safe(sc, tmp, &hss->client_list, node) { struct private_http_sender_data *phsd = sc->private_data; if (phsd->status == HTTP_CONNECTED) /* need to recv get request */ - para_fd_set(sc->fd, rfds, max_fileno); + sched_monitor_readfd(sc->fd, s); if (phsd->status == HTTP_GOT_GET_REQUEST || phsd->status == HTTP_INVALID_GET_REQUEST) - para_fd_set(sc->fd, wfds, max_fileno); + sched_monitor_writefd(sc->fd, s); } }