const char *path;
mode_t old_umask;
+ if (service_list->master_fd != -1)
+ return 1;
+
path = t_strdup_printf("%s/master", service_list->set->base_dir);
old_umask = umask(0600 ^ 0777);
service_list->master_fd = net_listen_unix(path, 16);
struct service_listener *const *new_listeners, *const *old_listeners;
unsigned int i, j, count, new_count, old_count;
+ /* copy master listener */
+ new_service_list->master_fd = old_service_list->master_fd;
+ old_service_list->master_fd = -1;
+
/* rescue anvil's UNIX socket listener */
new_service = service_lookup_type(new_service_list, SERVICE_TYPE_ANVIL);
old_service = service_lookup_type(old_service_list, SERVICE_TYPE_ANVIL);
services_monitor_wait_and_kill(service_list);
io_remove(&service_list->io_master);
- i_close_fd(&service_list->master_fd);
array_foreach(&service_list->services, services)
service_monitor_stop(*services);
array_foreach(&(*servicep)->listeners, listenerp)
i_close_fd(&(*listenerp)->fd);
}
+ i_close_fd(&service_list->master_fd);
+
timeout_remove(&service_list->to_kill);
pool_unref(&service_list->set_pool);
pool_unref(&service_list->pool);