doveadm_print_header_simple("last_drop_warning");
doveadm_print_header_simple("listen_pending");
doveadm_print_header_simple("listening");
+ doveadm_print_header_simple("doveadm_stop");
alarm(5);
while ((line = i_stream_read_next_line(input)) != NULL) {
break;
T_BEGIN {
const char *const *args = t_strsplit_tabescaped(line);
- if (str_array_length(args) >= 11 &&
+ if (str_array_length(args) >= 12 &&
(services == NULL ||
str_array_find(services, args[0]))) {
- for (unsigned int i = 0; i < 11; i++)
+ for (unsigned int i = 0; i < 12; i++)
doveadm_print(args[i]);
}
} T_END;
const struct service *service)
{
str_append_tabescaped(str, service->set->name);
- str_printfa(str, "\t%u\t%u\t%u\t%u\t%u\t%ld\t%u\t%ld\t%c\t%c\n",
+ str_printfa(str, "\t%u\t%u\t%u\t%u\t%u\t%ld\t%u\t%ld\t%c\t%c\t%c\n",
service->process_count, service->process_avail,
service->process_limit, service->client_limit,
service->to_throttle == NULL ? 0 : service->throttle_secs,
service->exit_failures_in_sec,
(long)service->last_drop_warning,
service->listen_pending ? 'y' : 'n',
- service->listening ? 'y' : 'n');
+ service->listening ? 'y' : 'n',
+ service->doveadm_stop ? 'y' : 'n');
}
static int
service = service_lookup(services, args[i]);
if (service == NULL)
reply = t_strdup_printf("-Unknown service: %s\n", args[i]);
- else
+ else {
service_monitor_stop_close(service);
+ service->doveadm_stop = TRUE;
+ }
}
o_stream_send_str(client->conn.output, reply);
return 1;