OpenWrt – Rev 1

Subversion Repositories:
Rev:
--- a/hostapd/main.c
+++ b/hostapd/main.c
@@ -38,6 +38,8 @@ struct hapd_global {
 };
 
 static struct hapd_global global;
+static int daemonize = 0;
+static char *pid_file = NULL;
 
 
 #ifndef CONFIG_NO_HOSTAPD_LOGGER
@@ -148,6 +150,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
@@ -166,6 +176,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;
@@ -406,8 +418,6 @@ static void hostapd_global_deinit(const
 #endif /* CONFIG_NATIVE_WINDOWS */
 
        eap_server_unregister_methods();
-
-       os_daemonize_terminate(pid_file);
 }
 
 
@@ -433,18 +443,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;
@@ -646,8 +644,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;