diff options
| author | David Oberhollenzer <goliath@infraroot.at> | 2019-03-18 18:38:27 +0100 | 
|---|---|---|
| committer | David Oberhollenzer <goliath@infraroot.at> | 2019-03-18 18:47:20 +0100 | 
| commit | a9602ad6e018afd7621052e1263d3cae0e6da5f3 (patch) | |
| tree | 55f702e36171f58112b9fc05c1d9d393e643bddf /initd | |
| parent | 3f40c4d3ed5d13e98a92773a475883237c3b549b (diff) | |
Cleanup status reporting
 - mimic format of initd
 - skip formatting if not a tty
 - distinguish exited because failed vs exited because done
Signed-off-by: David Oberhollenzer <goliath@infraroot.at>
Diffstat (limited to 'initd')
| -rw-r--r-- | initd/supervisor.c | 15 | 
1 files changed, 13 insertions, 2 deletions
| diff --git a/initd/supervisor.c b/initd/supervisor.c index 3743ad6..cd38469 100644 --- a/initd/supervisor.c +++ b/initd/supervisor.c @@ -8,6 +8,7 @@ static service_t *running = NULL;  static service_t *terminated = NULL;  static service_t *queue = NULL;  static service_t *completed = NULL; +static service_t *failed = NULL;  static int singleshot = 0;  static bool waiting = false; @@ -38,7 +39,7 @@ static void handle_terminated_service(service_t *svc)  			if (svc->rspwn_limit == 0) {  				print_status(svc->desc, STATUS_FAIL, false); -				break; +				goto out_failure;  			}  		} @@ -51,6 +52,8 @@ static void handle_terminated_service(service_t *svc)  			     STATUS_OK : STATUS_FAIL, true);  		if (singleshot == 0 && queue == NULL)  			target_completed(target); +		if (svc->status != EXIT_SUCCESS) +			goto out_failure;  		break;  	case SVC_ONCE:  		singleshot -= 1; @@ -59,10 +62,16 @@ static void handle_terminated_service(service_t *svc)  			     STATUS_OK : STATUS_FAIL, false);  		if (singleshot == 0 && queue == NULL && !waiting)  			target_completed(target); +		if (svc->status != EXIT_SUCCESS) +			goto out_failure;  		break;  	}  	svc->next = completed;  	completed = svc; +	return; +out_failure: +	svc->next = failed; +	failed = svc;  }  void supervisor_handle_exited(pid_t pid, int status) @@ -185,7 +194,9 @@ void supervisor_answer_status_request(int fd, const void *dst, size_t addrlen)  {  	if (send_svc_list(fd, dst, addrlen, ESS_RUNNING, running))  		return; -	if (send_svc_list(fd, dst, addrlen, ESS_EXITED, completed)) +	if (send_svc_list(fd, dst, addrlen, ESS_DONE, completed)) +		return; +	if (send_svc_list(fd, dst, addrlen, ESS_FAILED, failed))  		return;  	if (send_svc_list(fd, dst, addrlen, ESS_ENQUEUED, queue))  		return; | 
