--- a/hostapd/main.c +++ b/hostapd/main.c @@ -39,6 +39,8 @@ struct hapd_global { }; static struct hapd_global global; +static int daemonize = 0; +static char *pid_file = NULL; #ifndef CONFIG_NO_HOSTAPD_LOGGER @@ -146,6 +148,14 @@ static void hostapd_logger_cb(void *ctx, } #endif /* CONFIG_NO_HOSTAPD_LOGGER */ +static void hostapd_setup_complete_cb(void *ctx) +{ + if (daemonize && os_daemonize(pid_file)) { + perror("daemon"); + return; + } + daemonize = 0; +} /** * hostapd_driver_init - Preparate driver interface @@ -164,6 +174,8 @@ static int hostapd_driver_init(struct ho return -1; } + hapd->setup_complete_cb = hostapd_setup_complete_cb; + /* Initialize the driver interface */ if (!(b[0] | b[1] | b[2] | b[3] | b[4] | b[5])) b = NULL; @@ -404,8 +416,6 @@ static void hostapd_global_deinit(const #endif /* CONFIG_NATIVE_WINDOWS */ eap_server_unregister_methods(); - - os_daemonize_terminate(pid_file); } @@ -431,18 +441,6 @@ static int hostapd_global_run(struct hap } #endif /* EAP_SERVER_TNC */ - if (daemonize) { - if (os_daemonize(pid_file)) { - wpa_printf(MSG_ERROR, "daemon: %s", strerror(errno)); - return -1; - } - if (eloop_sock_requeue()) { - wpa_printf(MSG_ERROR, "eloop_sock_requeue: %s", - strerror(errno)); - return -1; - } - } - eloop_run(); return 0; @@ -645,8 +643,7 @@ int main(int argc, char *argv[]) struct hapd_interfaces interfaces; int ret = 1; size_t i, j; - int c, debug = 0, daemonize = 0; - char *pid_file = NULL; + int c, debug = 0; const char *log_file = NULL; const char *entropy_file = NULL; char **bss_config = NULL, **tmp_bss;