From d16d26018126d381954110e8cdb788650eb41d9e Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Wed, 27 Mar 2019 17:48:13 +0100 Subject: Add filter argument to status request Signed-off-by: David Oberhollenzer --- initd/init.h | 2 +- initd/main.c | 3 ++- initd/supervisor.c | 19 ++++++++++++------- 3 files changed, 15 insertions(+), 9 deletions(-) (limited to 'initd') diff --git a/initd/init.h b/initd/init.h index 39e63a4..1d292d3 100644 --- a/initd/init.h +++ b/initd/init.h @@ -68,7 +68,7 @@ void supervisor_init(void); bool supervisor_process_queues(void); void supervisor_answer_status_request(int fd, const void *dest_addr, - size_t addrlen); + size_t addrlen, E_SERVICE_STATE filter); /********** signal_.c **********/ diff --git a/initd/main.c b/initd/main.c index 3a824e4..4eb4832 100644 --- a/initd/main.c +++ b/initd/main.c @@ -61,7 +61,8 @@ retry: switch (rq.rq) { case EIR_STATUS: - supervisor_answer_status_request(sockfd, &addr, addrlen); + supervisor_answer_status_request(sockfd, &addr, addrlen, + rq.arg.status.filter); break; } } diff --git a/initd/supervisor.c b/initd/supervisor.c index 451ad93..4f7ddc9 100644 --- a/initd/supervisor.c +++ b/initd/supervisor.c @@ -186,8 +186,12 @@ out: } static int send_svc_list(int fd, const void *dst, size_t addrlen, - E_SERVICE_STATE state, service_t *list) + E_SERVICE_STATE filter, E_SERVICE_STATE state, + service_t *list) { + if (filter != ESS_NONE && filter != state) + return 0; + while (list != NULL) { if (init_socket_send_status(fd, dst, addrlen, state, list)) return -1; @@ -198,17 +202,18 @@ static int send_svc_list(int fd, const void *dst, size_t addrlen, return 0; } -void supervisor_answer_status_request(int fd, const void *dst, size_t addrlen) +void supervisor_answer_status_request(int fd, const void *dst, size_t addrlen, + E_SERVICE_STATE filter) { - if (send_svc_list(fd, dst, addrlen, ESS_RUNNING, running)) + if (send_svc_list(fd, dst, addrlen, filter, ESS_RUNNING, running)) return; - if (send_svc_list(fd, dst, addrlen, ESS_DONE, completed)) + if (send_svc_list(fd, dst, addrlen, filter, ESS_DONE, completed)) return; - if (send_svc_list(fd, dst, addrlen, ESS_FAILED, failed)) + if (send_svc_list(fd, dst, addrlen, filter, ESS_FAILED, failed)) return; - if (send_svc_list(fd, dst, addrlen, ESS_ENQUEUED, queue)) + if (send_svc_list(fd, dst, addrlen, filter, ESS_ENQUEUED, queue)) return; - if (send_svc_list(fd, dst, addrlen, ESS_ENQUEUED, terminated)) + if (send_svc_list(fd, dst, addrlen, filter, ESS_ENQUEUED, terminated)) return; init_socket_send_status(fd, dst, addrlen, ESS_NONE, NULL); } -- cgit v1.2.3