fast_reload_thread
void fast_reload_thread_stop(struct fast_reload_thread* fast_reload_thread);
if(daemon->fast_reload_thread)
fast_reload_thread_stop(daemon->fast_reload_thread);
struct fast_reload_thread* fast_reload_thread;
struct fast_reload_thread;
static void fr_main_perform_printout(struct fast_reload_thread* fr);
static void fr_check_cmd_from_thread(struct fast_reload_thread* fr);
fr_poll_for_quit(struct fast_reload_thread* fr)
fr_send_notification(struct fast_reload_thread* fr,
fr_output_text(struct fast_reload_thread* fr, const char* msg)
fr_output_vmsg(struct fast_reload_thread* fr, const char* format, va_list args)
static int fr_output_printf(struct fast_reload_thread* fr,
fr_output_printf(struct fast_reload_thread* fr, const char* format, ...)
fr_read_config(struct fast_reload_thread* fr, struct config_file** newcfg)
fr_check_tag_defines(struct fast_reload_thread* fr, struct config_file* newcfg)
fr_check_compat_cfg(struct fast_reload_thread* fr, struct config_file* newcfg)
fr_check_nopause_compat_cfg(struct fast_reload_thread* fr, struct config_file* newcfg)
fr_printmem(struct fast_reload_thread* fr,
fr_add_auth_zone_change(struct fast_reload_thread* fr, struct auth_zone* old_z,
auth_zones_check_changes(struct fast_reload_thread* fr,
fr_check_sslctx_change(struct fast_reload_thread* fr,
fr_construct_from_config(struct fast_reload_thread* fr,
fr_finish_time(struct fast_reload_thread* fr, struct timeval* time_start,
fr_reload_config(struct fast_reload_thread* fr, struct config_file* newcfg,
fr_poll_for_ack(struct fast_reload_thread* fr)
fr_reload_ipc(struct fast_reload_thread* fr, struct config_file* newcfg,
fr_load_config(struct fast_reload_thread* fr, struct timeval* time_read,
struct fast_reload_thread* fast_reload_thread = (struct fast_reload_thread*)arg;
fast_reload_thread->thread_tid = gettid();
if(fast_reload_thread->thread_tid_log)
log_thread_set(&fast_reload_thread->thread_tid);
log_thread_set(&fast_reload_thread->threadnum);
ub_thread_setname(fast_reload_thread->tid, name);
if(fast_reload_thread->fr_verb >= 1) {
if(fr_poll_for_quit(fast_reload_thread))
if(fast_reload_thread->fr_verb >= 1) {
if(!fr_output_printf(fast_reload_thread, "thread started\n"))
fr_send_notification(fast_reload_thread,
if(fr_poll_for_quit(fast_reload_thread))
if(!fr_load_config(fast_reload_thread, &time_read, &time_construct,
if(fr_poll_for_quit(fast_reload_thread))
if(fast_reload_thread->fr_verb >= 1) {
if(!fr_finish_time(fast_reload_thread, &time_start, &time_read,
if(fr_poll_for_quit(fast_reload_thread))
if(!fr_output_printf(fast_reload_thread, "ok\n"))
fr_send_notification(fast_reload_thread,
if(!fast_reload_thread->need_to_quit)
fr_send_notification(fast_reload_thread,
if(fast_reload_thread->need_to_quit)
fr_send_notification(fast_reload_thread,
fr_send_notification(fast_reload_thread,
struct fast_reload_thread* fr;
worker->daemon->fast_reload_thread = (struct fast_reload_thread*)
calloc(1, sizeof(*worker->daemon->fast_reload_thread));
if(!worker->daemon->fast_reload_thread)
fr = worker->daemon->fast_reload_thread;
worker->daemon->fast_reload_thread = NULL;
worker->daemon->fast_reload_thread = NULL;
worker->daemon->fast_reload_thread = NULL;
fast_reload_thread_desetup(struct fast_reload_thread* fast_reload_thread)
if(!fast_reload_thread)
if(fast_reload_thread->service_event &&
fast_reload_thread->service_event_is_added) {
ub_event_del(fast_reload_thread->service_event);
fast_reload_thread->service_event_is_added = 0;
if(fast_reload_thread->service_event)
ub_event_free(fast_reload_thread->service_event);
sock_close(fast_reload_thread->commpair[0]);
sock_close(fast_reload_thread->commpair[1]);
sock_close(fast_reload_thread->commreload[0]);
sock_close(fast_reload_thread->commreload[1]);
if(fast_reload_thread->printq) {
fr_main_perform_printout(fast_reload_thread);
if(fr_printq_empty(fast_reload_thread->printq)) {
fr_printq_delete(fast_reload_thread->printq);
fr_printq_list_insert(fast_reload_thread->printq,
fast_reload_thread->worker->daemon);
fast_reload_thread->printq = NULL;
lock_basic_destroy(&fast_reload_thread->fr_output_lock);
if(fast_reload_thread->fr_output) {
config_delstrlist(fast_reload_thread->fr_output->first);
free(fast_reload_thread->fr_output);
fr_auth_change_list_delete(fast_reload_thread->auth_zone_change_list);
free(fast_reload_thread);
fr_send_cmd_to(struct fast_reload_thread* fr,
fr_main_perform_done(struct fast_reload_thread* fr)
worker->daemon->fast_reload_thread = NULL;
fr_main_perform_printout(struct fast_reload_thread* fr)
fr_read_ack_from_workers(struct fast_reload_thread* fr)
fr_poll_for_reload_start(struct fast_reload_thread* fr)
lock_rw_wrlock(&worker->daemon->fast_reload_thread->old_auth_zones->lock);
*loadxfr = auth_xfer_find(worker->daemon->fast_reload_thread->
lock_rw_unlock(&worker->daemon->fast_reload_thread->old_auth_zones->lock);
lock_rw_unlock(&worker->daemon->fast_reload_thread->old_auth_zones->lock);
lock_rw_unlock(&worker->daemon->fast_reload_thread->old_auth_zones->lock);
lock_rw_unlock(&worker->daemon->fast_reload_thread->old_auth_zones->lock);
if(worker->daemon->fast_reload_thread->sslctxs_changed) {
if(worker->daemon->fast_reload_thread->sslctxs_changed)
worker->daemon->fast_reload_thread->auth_zone_change_list);
fr_main_perform_reload_stop(struct fast_reload_thread* fr)
fr_main_perform_reload_nopause_poll(struct fast_reload_thread* fr)
fr_main_perform_cmd(struct fast_reload_thread* fr,
fr_main_handle_cmd(struct fast_reload_thread* fr)
fr_check_cmd_from_thread(struct fast_reload_thread* fr)
while(worker->daemon->fast_reload_thread) {
if(worker->daemon->fast_reload_thread)
fast_reload_thread->service_event,
if(worker->daemon->fast_reload_thread)
fast_reload_thread->service_event,
struct fast_reload_thread* fast_reload_thread =
(struct fast_reload_thread*)arg;
struct worker* worker = fast_reload_thread->worker;
fr_main_handle_cmd(fast_reload_thread);
if(worker->daemon->fast_reload_thread != NULL) {
fr_check_cmd_from_thread(fast_reload_thread);
if(printq->worker->daemon->fast_reload_thread &&
printq->worker->daemon->fast_reload_thread->printq == printq)
printq->worker->daemon->fast_reload_thread->printq = NULL;
fr_send_stop(struct fast_reload_thread* fr)
if(worker->daemon->fast_reload_thread) {
worker->daemon->fast_reload_thread->started = 1;
fd_set_nonblock(worker->daemon->fast_reload_thread->commpair[0]);
worker->daemon->fast_reload_thread->service_event = ub_event_new(
worker->daemon->fast_reload_thread->commpair[0],
worker->daemon->fast_reload_thread);
if(!worker->daemon->fast_reload_thread->service_event) {
fast_reload_thread_desetup(worker->daemon->fast_reload_thread);
if(ub_event_add(worker->daemon->fast_reload_thread->service_event,
fast_reload_thread_desetup(worker->daemon->fast_reload_thread);
worker->daemon->fast_reload_thread->service_event_is_added = 1;
worker->daemon->fast_reload_thread->printq = fr_printq_create(s->c,
if(!worker->daemon->fast_reload_thread->printq) {
fast_reload_thread_desetup(worker->daemon->fast_reload_thread);
worker->daemon->fast_reload_thread->printq->remote = *ssl;
comm_point_stop_listening(worker->daemon->fast_reload_thread->printq->client_cp);
ub_thread_create(&worker->daemon->fast_reload_thread->tid,
fast_reload_thread_main, worker->daemon->fast_reload_thread);
fast_reload_thread_stop(struct fast_reload_thread* fast_reload_thread)
struct worker* worker = fast_reload_thread->worker;
if(!fast_reload_thread)
fr_send_stop(fast_reload_thread);
if(worker->daemon->fast_reload_thread != NULL) {
fr_main_perform_done(fast_reload_thread);
void fast_reload_thread_stop(struct fast_reload_thread* fast_reload_thread);
ret = send(worker->daemon->fast_reload_thread->commreload[1],
struct fast_reload_thread* ATTR_UNUSED(fast_reload_thread))