--- a/hostapd/main.c +++ b/hostapd/main.c @@ -32,6 +32,8 @@ extern int wpa_debug_level; extern int wpa_debug_show_keys; extern int wpa_debug_timestamp; +static int daemonize = 0; +static char *pid_file = NULL; extern struct wpa_driver_ops *wpa_drivers[]; @@ -279,6 +281,14 @@ static int hostapd_driver_init(struct ho return 0; } +static void hostapd_setup_complete_cb(void *ctx) +{ + if (daemonize && os_daemonize(pid_file)) { + perror("daemon"); + return; + } + daemonize = 0; +} static struct hostapd_iface * hostapd_interface_init(struct hapd_interfaces *interfaces, @@ -298,6 +308,7 @@ hostapd_interface_init(struct hapd_inter iface->bss[0]->conf->logger_stdout_level--; } + iface->bss[0]->setup_complete_cb = hostapd_setup_complete_cb; if (iface->conf->bss[0].iface[0] != 0 || hostapd_drv_none(iface->bss[0])) { if (hostapd_driver_init(iface) || @@ -310,7 +321,6 @@ hostapd_interface_init(struct hapd_inter return iface; } - /** * handle_term - SIGINT and SIGTERM handler to terminate hostapd process */ @@ -425,8 +435,6 @@ static void hostapd_global_deinit(const #endif /* CONFIG_NATIVE_WINDOWS */ eap_server_unregister_methods(); - - os_daemonize_terminate(pid_file); } @@ -452,11 +460,6 @@ static int hostapd_global_run(struct hap } #endif /* EAP_SERVER_TNC */ - if (daemonize && os_daemonize(pid_file)) { - perror("daemon"); - return -1; - } - eloop_run(); return 0; @@ -540,8 +543,7 @@ int main(int argc, char *argv[]) struct hapd_interfaces interfaces; int ret = 1; size_t i; - int c, debug = 0, daemonize = 0; - char *pid_file = NULL; + int c, debug = 0; const char *log_file = NULL; const char *entropy_file = NULL;