view src/lib-master/master-service-private.h @ 22558:a9c51256847e

lib-master: master_service_init_log() - Switch log handlers only on the first call The secondary calls were only done by mail_storage_service_*() calls. They want to initialize the logging once, but afterwards they only care about changing the log prefix. Switch to this behavior now explicitly. This fixes behavior if logging functions are changed between mail_storage_service_*() calls, so they don't get reset.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Tue, 03 Oct 2017 14:51:16 +0300
parents baa85b2663b5
children
line wrap: on
line source

#ifndef MASTER_SERVICE_PRIVATE_H
#define MASTER_SERVICE_PRIVATE_H

#include "master-interface.h"
#include "master-service.h"

struct master_service_haproxy_conn;

struct master_service_listener {
	struct master_service *service;
	char *name;

	/* settings */
	bool ssl;
	bool haproxy;

	/* state */
	bool closed;
	int fd;	
	struct io *io;
};

struct master_service {
	struct ioloop *ioloop;

	char *name;
	char *getopt_str;
	enum master_service_flags flags;

	int argc;
	char **argv;

	const char *version_string;
	char *config_path;
	ARRAY_TYPE(const_string) config_overrides;
	int config_fd;
	int syslog_facility;

	struct master_service_listener *listeners;
	unsigned int socket_count;

	struct io *io_status_write, *io_status_error;
	unsigned int service_count_left;
	unsigned int total_available_count;
	unsigned int process_limit;
	unsigned int process_min_avail;
	unsigned int idle_kill_secs;

	struct master_status master_status;
	unsigned int last_sent_status_avail_count;
	time_t last_sent_status_time;
	struct timeout *to_status;

	bool (*idle_die_callback)(void);
	void (*die_callback)(void);
	struct timeout *to_die;

	void (*avail_overflow_callback)(void);
	struct timeout *to_overflow_state;

	struct master_login *login;

	master_service_connection_callback_t *callback;

	pool_t set_pool;
	const struct master_service_settings *set;
	struct setting_parser_context *set_parser;

	struct ssl_iostream_context *ssl_ctx;
	time_t ssl_params_last_refresh;

	struct master_service_haproxy_conn *haproxy_conns;

	unsigned int killed:1;
	unsigned int stopping:1;
	unsigned int keep_environment:1;
	unsigned int log_directly:1;
	unsigned int initial_status_sent:1;
	unsigned int die_with_master:1;
	unsigned int call_avail_overflow:1;
	unsigned int config_path_changed_with_param:1;
	unsigned int want_ssl_settings:1;
	unsigned int ssl_ctx_initialized:1;
	unsigned int config_path_from_master:1;
	unsigned int log_initialized:1;
};

void master_service_io_listeners_add(struct master_service *service);
void master_status_update(struct master_service *service);
void master_service_close_config_fd(struct master_service *service);

void master_service_io_listeners_remove(struct master_service *service);
void master_service_ssl_io_listeners_remove(struct master_service *service);

void master_service_client_connection_handled(struct master_service *service,
					      struct master_service_connection *conn);
void master_service_client_connection_callback(struct master_service *service,
					       struct master_service_connection *conn);

void master_service_haproxy_new(struct master_service *service,
				struct master_service_connection *conn);
void master_service_haproxy_abort(struct master_service *service);

#endif