Lines Matching full:fr

139 static void fr_main_perform_printout(struct fast_reload_thread* fr);
144 static void fr_check_cmd_from_thread(struct fast_reload_thread* fr);
4445 fr_poll_for_quit(struct fast_reload_thread* fr) in fr_poll_for_quit() argument
4451 if(fr->need_to_quit) in fr_poll_for_quit()
4454 if(!sock_poll_timeout(fr->commpair[1], 0, 1, 0, &inevent)) { in fr_poll_for_quit()
4468 ret = recv(fr->commpair[1], ((char*)&cmd)+bcount, in fr_poll_for_quit()
4495 fr->need_to_quit = 1; in fr_poll_for_quit()
4506 fr_send_notification(struct fast_reload_thread* fr, in fr_send_notification() argument
4517 if(fr_poll_for_quit(fr)) in fr_send_notification()
4526 if(!sock_poll_timeout(fr->commpair[1], IPC_NOTIFICATION_WAIT, in fr_send_notification()
4531 if(fr_poll_for_quit(fr)) in fr_send_notification()
4535 ret = send(fr->commpair[1], ((char*)&cmd)+bcount, in fr_send_notification()
4565 fr_output_text(struct fast_reload_thread* fr, const char* msg) in fr_output_text() argument
4572 lock_basic_lock(&fr->fr_output_lock); in fr_output_text()
4573 if(!cfg_strlist_append(fr->fr_output, item)) { in fr_output_text()
4574 lock_basic_unlock(&fr->fr_output_lock); in fr_output_text()
4579 lock_basic_unlock(&fr->fr_output_lock); in fr_output_text()
4585 fr_output_vmsg(struct fast_reload_thread* fr, const char* format, va_list args) in fr_output_vmsg() argument
4589 return fr_output_text(fr, msg); in fr_output_vmsg()
4593 static int fr_output_printf(struct fast_reload_thread* fr,
4600 fr_output_printf(struct fast_reload_thread* fr, const char* format, ...) in fr_output_printf() argument
4605 ret = fr_output_vmsg(fr, format, args); in fr_output_printf()
4689 fr_read_config(struct fast_reload_thread* fr, struct config_file** newcfg) in fr_read_config() argument
4694 if(!fr_output_printf(fr, "config_create failed: out of memory\n")) in fr_read_config()
4696 fr_send_notification(fr, fast_reload_notification_printout); in fr_read_config()
4699 if(fr_poll_for_quit(fr)) in fr_read_config()
4703 if(!config_read(*newcfg, fr->worker->daemon->cfgfile, in fr_read_config()
4704 fr->worker->daemon->chroot)) { in fr_read_config()
4706 if(!fr_output_printf(fr, "config_read %s%s%s%s failed: %s\n", in fr_read_config()
4707 (fr->worker->daemon->chroot?"<chroot:":""), in fr_read_config()
4708 (fr->worker->daemon->chroot?fr->worker->daemon->chroot:""), in fr_read_config()
4709 (fr->worker->daemon->chroot?"> ":""), in fr_read_config()
4710 fr->worker->daemon->cfgfile, strerror(errno))) in fr_read_config()
4712 fr_send_notification(fr, fast_reload_notification_printout); in fr_read_config()
4715 if(fr_poll_for_quit(fr)) in fr_read_config()
4717 if(fr->fr_verb >= 1) { in fr_read_config()
4718 if(!fr_output_printf(fr, "done read config file %s%s%s%s\n", in fr_read_config()
4719 (fr->worker->daemon->chroot?"<chroot:":""), in fr_read_config()
4720 (fr->worker->daemon->chroot?fr->worker->daemon->chroot:""), in fr_read_config()
4721 (fr->worker->daemon->chroot?"> ":""), in fr_read_config()
4722 fr->worker->daemon->cfgfile)) in fr_read_config()
4724 fr_send_notification(fr, fast_reload_notification_printout); in fr_read_config()
4763 fr_check_tag_defines(struct fast_reload_thread* fr, struct config_file* newcfg) in fr_check_tag_defines() argument
4770 if(!taglist_equal(fr->worker->daemon->cfg->tagname, in fr_check_tag_defines()
4771 fr->worker->daemon->cfg->num_tags, newcfg->tagname, in fr_check_tag_defines()
4773 !taglist_change_at_end(fr->worker->daemon->cfg->tagname, in fr_check_tag_defines()
4774 fr->worker->daemon->cfg->num_tags, newcfg->tagname, in fr_check_tag_defines()
4777 if(fr->fr_drop_mesh) in fr_check_tag_defines()
4779 fr->fr_drop_mesh = 1; in fr_check_tag_defines()
4780 fr->worker->daemon->fast_reload_drop_mesh = fr->fr_drop_mesh; in fr_check_tag_defines()
4781 if(!fr_output_printf(fr, "tags have changed, with " in fr_check_tag_defines()
4785 fr_send_notification(fr, fast_reload_notification_printout); in fr_check_tag_defines()
4886 fr_check_compat_cfg(struct fast_reload_thread* fr, struct config_file* newcfg) in fr_check_compat_cfg() argument
4890 struct config_file* cfg = fr->worker->env.cfg; in fr_check_compat_cfg()
4946 if(!fr_output_printf(fr, "The config changes items that are " in fr_check_compat_cfg()
4949 !fr_output_printf(fr, "\n")) in fr_check_compat_cfg()
4951 fr_send_notification(fr, fast_reload_notification_printout); in fr_check_compat_cfg()
4959 fr_check_nopause_compat_cfg(struct fast_reload_thread* fr, struct config_file* newcfg) in fr_check_nopause_compat_cfg() argument
4962 struct config_file* cfg = fr->worker->env.cfg; in fr_check_nopause_compat_cfg()
4963 if(!fr->fr_nopause) in fr_check_nopause_compat_cfg()
5009 if(!fr_output_printf(fr, "The config changes items that need " in fr_check_nopause_compat_cfg()
5012 !fr_output_printf(fr, "\n")) in fr_check_nopause_compat_cfg()
5014 fr_send_notification(fr, fast_reload_notification_printout); in fr_check_nopause_compat_cfg()
5288 fr_printmem(struct fast_reload_thread* fr, in fr_printmem() argument
5292 if(fr_poll_for_quit(fr)) in fr_printmem()
5308 if(!fr_output_printf(fr, "memory use %d bytes\n", (int)mem)) in fr_printmem()
5310 fr_send_notification(fr, fast_reload_notification_printout); in fr_printmem()
5338 fr_add_auth_zone_change(struct fast_reload_thread* fr, struct auth_zone* old_z, in fr_add_auth_zone_change() argument
5353 item->next = fr->auth_zone_change_list; in fr_add_auth_zone_change()
5354 fr->auth_zone_change_list = item; in fr_add_auth_zone_change()
5426 auth_zones_check_changes(struct fast_reload_thread* fr, in auth_zones_check_changes() argument
5431 struct module_env* env = &fr->worker->env; in auth_zones_check_changes()
5433 fr->old_auth_zones = ct->auth_zones; in auth_zones_check_changes()
5446 if(!fr_add_auth_zone_change(fr, old_z, NULL, 1, 0, in auth_zones_check_changes()
5464 if(!fr_add_auth_zone_change(fr, NULL, new_z, 0, 1, in auth_zones_check_changes()
5497 if(!fr_add_auth_zone_change(fr, old_z, new_z, in auth_zones_check_changes()
5529 fr_construct_from_config(struct fast_reload_thread* fr, in fr_construct_from_config() argument
5542 if(fr_poll_for_quit(fr)) in fr_construct_from_config()
5553 if(fr_poll_for_quit(fr)) in fr_construct_from_config()
5561 fr->worker->daemon)) { in fr_construct_from_config()
5569 if(fr_poll_for_quit(fr)) in fr_construct_from_config()
5580 if(fr->worker->daemon->tcl->tree.count != 0) in fr_construct_from_config()
5581 fr->worker->daemon->fast_reload_tcl_has_changes = 1; in fr_construct_from_config()
5582 else fr->worker->daemon->fast_reload_tcl_has_changes = 0; in fr_construct_from_config()
5583 if(fr_poll_for_quit(fr)) in fr_construct_from_config()
5591 fr->worker->daemon->env, &fr->worker->daemon->mods)) { in fr_construct_from_config()
5595 if(!auth_zones_check_changes(fr, ct)) { in fr_construct_from_config()
5599 if(fr_poll_for_quit(fr)) in fr_construct_from_config()
5610 if(fr_poll_for_quit(fr)) in fr_construct_from_config()
5621 if(fr_poll_for_quit(fr)) in fr_construct_from_config()
5632 if(fr_poll_for_quit(fr)) in fr_construct_from_config()
5643 if(fr_poll_for_quit(fr)) in fr_construct_from_config()
5651 if(fr_poll_for_quit(fr)) in fr_construct_from_config()
5662 if(fr_poll_for_quit(fr)) in fr_construct_from_config()
5665 if(fr->worker->env.anchors) { in fr_construct_from_config()
5675 if(fr_poll_for_quit(fr)) in fr_construct_from_config()
5685 if(fr_poll_for_quit(fr)) in fr_construct_from_config()
5723 if(fr_poll_for_quit(fr)) in fr_construct_from_config()
5735 if(fr_poll_for_quit(fr)) in fr_construct_from_config()
5744 if(fr->fr_verb >= 2) { in fr_construct_from_config()
5745 if(!fr_printmem(fr, newcfg, ct)) in fr_construct_from_config()
5753 fr_finish_time(struct fast_reload_thread* fr, struct timeval* time_start, in fr_finish_time() argument
5766 if(!fr_output_printf(fr, "read disk %3d.%6.6ds\n", in fr_finish_time()
5769 if(!fr_output_printf(fr, "construct %3d.%6.6ds\n", in fr_finish_time()
5772 if(!fr_output_printf(fr, "reload %3d.%6.6ds\n", in fr_finish_time()
5775 if(!fr_output_printf(fr, "deletes %3d.%6.6ds\n", in fr_finish_time()
5778 if(!fr_output_printf(fr, "total time %3d.%6.6ds\n", (int)total.tv_sec, in fr_finish_time()
5781 fr_send_notification(fr, fast_reload_notification_printout); in fr_finish_time()
6226 * when fr nopause is used. Without it the fast reload pauses the in fr_adjust_iter_env()
6275 * when fr nopause is used. Without it the fast reload pauses the in fr_adjust_val_env()
6328 fr_reload_config(struct fast_reload_thread* fr, struct config_file* newcfg, in fr_reload_config() argument
6331 struct daemon* daemon = fr->worker->daemon; in fr_reload_config()
6360 if(fr->fr_nopause) { in fr_reload_config()
6379 if(!fr->fr_nopause) in fr_reload_config()
6407 if(!fr->fr_nopause) in fr_reload_config()
6413 if(!fr->fr_nopause) { in fr_reload_config()
6446 fr_poll_for_ack(struct fast_reload_thread* fr) in fr_poll_for_ack() argument
6452 if(fr->need_to_quit) in fr_poll_for_ack()
6455 if(!sock_poll_timeout(fr->commpair[1], -1, 1, 0, NULL)) { in fr_poll_for_ack()
6467 ret = recv(fr->commpair[1], ((char*)&cmd)+bcount, in fr_poll_for_ack()
6494 fr->need_to_quit = 1; in fr_poll_for_ack()
6507 fr_reload_ipc(struct fast_reload_thread* fr, struct config_file* newcfg, in fr_reload_ipc() argument
6511 if(!fr->fr_nopause) { in fr_reload_ipc()
6512 fr_send_notification(fr, fast_reload_notification_reload_stop); in fr_reload_ipc()
6513 fr_poll_for_ack(fr); in fr_reload_ipc()
6515 if(!fr_reload_config(fr, newcfg, ct)) { in fr_reload_ipc()
6518 if(!fr->fr_nopause) { in fr_reload_ipc()
6519 fr_send_notification(fr, fast_reload_notification_reload_start); in fr_reload_ipc()
6520 fr_poll_for_ack(fr); in fr_reload_ipc()
6527 fr_load_config(struct fast_reload_thread* fr, struct timeval* time_read, in fr_load_config() argument
6535 if(!fr_read_config(fr, &newcfg)) in fr_load_config()
6539 if(fr_poll_for_quit(fr)) { in fr_load_config()
6545 if(!fr_check_tag_defines(fr, newcfg)) { in fr_load_config()
6549 if(!fr_check_compat_cfg(fr, newcfg)) { in fr_load_config()
6553 if(!fr_check_nopause_compat_cfg(fr, newcfg)) { in fr_load_config()
6557 if(fr_poll_for_quit(fr)) { in fr_load_config()
6563 if(!fr_construct_from_config(fr, newcfg, &ct)) { in fr_load_config()
6565 if(!fr_output_printf(fr, "Could not construct from the " in fr_load_config()
6570 fr_send_notification(fr, fast_reload_notification_printout); in fr_load_config()
6575 if(fr_poll_for_quit(fr)) { in fr_load_config()
6582 if(!fr_reload_ipc(fr, newcfg, &ct)) { in fr_load_config()
6585 if(!fr_output_printf(fr, "error: reload failed\n")) in fr_load_config()
6587 fr_send_notification(fr, fast_reload_notification_printout); in fr_load_config()
6593 if(fr_poll_for_quit(fr)) { in fr_load_config()
6598 if(fr->fr_nopause) { in fr_load_config()
6612 fr_send_notification(fr, in fr_load_config()
6614 fr_poll_for_ack(fr); in fr_load_config()
6973 struct fast_reload_thread* fr; in fast_reload_thread_setup() local
6979 fr = worker->daemon->fast_reload_thread; in fast_reload_thread_setup()
6980 fr->fr_verb = fr_verb; in fast_reload_thread_setup()
6981 fr->fr_nopause = fr_nopause; in fast_reload_thread_setup()
6982 fr->fr_drop_mesh = fr_drop_mesh; in fast_reload_thread_setup()
6983 worker->daemon->fast_reload_drop_mesh = fr->fr_drop_mesh; in fast_reload_thread_setup()
6986 fr->threadnum = numworkers+2; in fast_reload_thread_setup()
6987 fr->commpair[0] = -1; in fast_reload_thread_setup()
6988 fr->commpair[1] = -1; in fast_reload_thread_setup()
6989 fr->commreload[0] = -1; in fast_reload_thread_setup()
6990 fr->commreload[1] = -1; in fast_reload_thread_setup()
6991 if(!create_socketpair(fr->commpair, worker->daemon->rand)) { in fast_reload_thread_setup()
6992 free(fr); in fast_reload_thread_setup()
6996 fr->worker = worker; in fast_reload_thread_setup()
6997 fr->fr_output = (struct config_strlist_head*)calloc(1, in fast_reload_thread_setup()
6998 sizeof(*fr->fr_output)); in fast_reload_thread_setup()
6999 if(!fr->fr_output) { in fast_reload_thread_setup()
7000 sock_close(fr->commpair[0]); in fast_reload_thread_setup()
7001 sock_close(fr->commpair[1]); in fast_reload_thread_setup()
7002 free(fr); in fast_reload_thread_setup()
7006 if(!create_socketpair(fr->commreload, worker->daemon->rand)) { in fast_reload_thread_setup()
7007 sock_close(fr->commpair[0]); in fast_reload_thread_setup()
7008 sock_close(fr->commpair[1]); in fast_reload_thread_setup()
7009 free(fr->fr_output); in fast_reload_thread_setup()
7010 free(fr); in fast_reload_thread_setup()
7014 lock_basic_init(&fr->fr_output_lock); in fast_reload_thread_setup()
7015 lock_protect(&fr->fr_output_lock, fr->fr_output, in fast_reload_thread_setup()
7016 sizeof(*fr->fr_output)); in fast_reload_thread_setup()
7083 fr_send_cmd_to(struct fast_reload_thread* fr, in fr_send_cmd_to() argument
7098 fr_check_cmd_from_thread(fr); in fr_send_cmd_to()
7100 if(!sock_poll_timeout(fr->commpair[0], in fr_send_cmd_to()
7109 log_assert(fr->commpair[0] >= 0); in fr_send_cmd_to()
7110 ret = send(fr->commpair[0], ((char*)&cmd)+bcount, in fr_send_cmd_to()
7141 fr_main_perform_done(struct fast_reload_thread* fr) in fr_main_perform_done() argument
7143 struct worker* worker = fr->worker; in fr_main_perform_done()
7145 ub_thread_join(fr->tid); in fr_main_perform_done()
7147 fast_reload_thread_desetup(fr); in fr_main_perform_done()
7168 fr_main_perform_printout(struct fast_reload_thread* fr) in fr_main_perform_printout() argument
7173 lock_basic_lock(&fr->fr_output_lock); in fr_main_perform_printout()
7174 out.first = fr->fr_output->first; in fr_main_perform_printout()
7175 out.last = fr->fr_output->last; in fr_main_perform_printout()
7176 fr->fr_output->first = NULL; in fr_main_perform_printout()
7177 fr->fr_output->last = NULL; in fr_main_perform_printout()
7178 lock_basic_unlock(&fr->fr_output_lock); in fr_main_perform_printout()
7180 if(!fr->printq || !fr->printq->client_cp) { in fr_main_perform_printout()
7190 cfg_strlist_append_listhead(fr->printq->to_print, &out); in fr_main_perform_printout()
7193 if(!fr->printq->client_cp->event_added) in fr_main_perform_printout()
7194 comm_point_listen_for_rw(fr->printq->client_cp, 0, 1); in fr_main_perform_printout()
7200 fr_read_ack_from_workers(struct fast_reload_thread* fr) in fr_read_ack_from_workers() argument
7202 struct daemon* daemon = fr->worker->daemon; in fr_read_ack_from_workers()
7208 ret = recv(fr->commreload[0], (void*)&r, 1, 0); in fr_read_ack_from_workers()
7236 fr_poll_for_reload_start(struct fast_reload_thread* fr) in fr_poll_for_reload_start() argument
7243 if(!sock_poll_timeout(fr->commpair[0], -1, 1, 0, NULL)) { in fr_poll_for_reload_start()
7255 ret = recv(fr->commpair[0], ((char*)&cmd)+bcount, in fr_poll_for_reload_start()
7648 fr_main_perform_reload_stop(struct fast_reload_thread* fr) in fr_main_perform_reload_stop() argument
7650 struct daemon* daemon = fr->worker->daemon; in fr_main_perform_reload_stop()
7655 if(i == fr->worker->thread_num) in fr_main_perform_reload_stop()
7661 fr_read_ack_from_workers(fr); in fr_main_perform_reload_stop()
7664 fr_send_cmd_to(fr, fast_reload_notification_reload_ack, 0, 1); in fr_main_perform_reload_stop()
7667 fr_poll_for_reload_start(fr); in fr_main_perform_reload_stop()
7671 if(i == fr->worker->thread_num) in fr_main_perform_reload_stop()
7677 if(fr->worker->daemon->fast_reload_drop_mesh) { in fr_main_perform_reload_stop()
7679 mesh_delete_all(fr->worker->env.mesh); in fr_main_perform_reload_stop()
7681 fast_reload_worker_pickup_changes(fr->worker); in fr_main_perform_reload_stop()
7684 fr_read_ack_from_workers(fr); in fr_main_perform_reload_stop()
7687 fr_send_cmd_to(fr, fast_reload_notification_reload_ack, 0, 1); in fr_main_perform_reload_stop()
7697 fr_main_perform_reload_nopause_poll(struct fast_reload_thread* fr) in fr_main_perform_reload_nopause_poll() argument
7699 struct daemon* daemon = fr->worker->daemon; in fr_main_perform_reload_nopause_poll()
7705 if(i == fr->worker->thread_num) in fr_main_perform_reload_nopause_poll()
7711 fr_read_ack_from_workers(fr); in fr_main_perform_reload_nopause_poll()
7712 fast_reload_worker_pickup_changes(fr->worker); in fr_main_perform_reload_nopause_poll()
7715 fr_send_cmd_to(fr, fast_reload_notification_reload_ack, 0, 1); in fr_main_perform_reload_nopause_poll()
7720 fr_main_perform_cmd(struct fast_reload_thread* fr, in fr_main_perform_cmd() argument
7726 fr_main_perform_printout(fr); in fr_main_perform_cmd()
7730 fr_main_perform_done(fr); in fr_main_perform_cmd()
7732 fr_main_perform_reload_stop(fr); in fr_main_perform_cmd()
7734 fr_main_perform_reload_nopause_poll(fr); in fr_main_perform_cmd()
7743 fr_main_handle_cmd(struct fast_reload_thread* fr) in fr_main_handle_cmd() argument
7748 log_assert(fr->commpair[0] >= 0); in fr_main_handle_cmd()
7749 ret = recv(fr->commpair[0], in fr_main_handle_cmd()
7750 ((char*)&fr->service_read_cmd)+fr->service_read_cmd_count, in fr_main_handle_cmd()
7751 sizeof(fr->service_read_cmd)-fr->service_read_cmd_count, 0); in fr_main_handle_cmd()
7767 ub_winsock_tcp_wouldblock(fr->service_event, in fr_main_handle_cmd()
7777 fr->service_read_cmd_count = 0; in fr_main_handle_cmd()
7779 fr->service_read_cmd = fast_reload_notification_done_error; in fr_main_handle_cmd()
7780 } else if(ret + (ssize_t)fr->service_read_cmd_count < in fr_main_handle_cmd()
7781 (ssize_t)sizeof(fr->service_read_cmd)) { in fr_main_handle_cmd()
7782 fr->service_read_cmd_count += ret; in fr_main_handle_cmd()
7786 status = fr->service_read_cmd; in fr_main_handle_cmd()
7787 fr->service_read_cmd = 0; in fr_main_handle_cmd()
7788 fr->service_read_cmd_count = 0; in fr_main_handle_cmd()
7789 fr_main_perform_cmd(fr, status); in fr_main_handle_cmd()
7794 fr_check_cmd_from_thread(struct fast_reload_thread* fr) in fr_check_cmd_from_thread() argument
7797 struct worker* worker = fr->worker; in fr_check_cmd_from_thread()
7800 if(!sock_poll_timeout(fr->commpair[0], 0, 1, 0, &inevent)) { in fr_check_cmd_from_thread()
7820 fr_main_handle_cmd(fr); in fr_check_cmd_from_thread()
8156 fr_send_stop(struct fast_reload_thread* fr) in fr_send_stop() argument
8158 fr_send_cmd_to(fr, fast_reload_notification_exit, 1, 0); in fr_send_stop()