Remove cfg library
[openvswitch] / ovsdb / ovsdb-server.c
index f63081369183245a169e93bd27837249e6a1a43d..125001fe6783c6cb9f4587792a8f5c24142b106f 100644 (file)
@@ -44,8 +44,6 @@
 #include "vlog.h"
 #define THIS_MODULE VLM_ovsdb_server
 
-static const struct jsonrpc_server_cbs ovsdb_jsonrpc_cbs;
-
 static unixctl_cb_func ovsdb_server_exit;
 
 static void parse_options(int argc, char *argv[], char **file_namep,
@@ -64,7 +62,6 @@ main(int argc, char *argv[])
     struct ovsdb *db;
     const char *name;
     char *file_name;
-    bool do_chdir;
     bool exiting;
     int retval;
     size_t i;
@@ -78,19 +75,8 @@ main(int argc, char *argv[])
 
     parse_options(argc, argv, &file_name, &active, &passive, &unixctl_path);
 
-    if (get_detach() && is_chdir_enabled()) {
-        /* We need to skip chdir("/") in daemonize() and do it later, because
-         * we need to open the database and possible set up up Unix domain
-         * sockets in the current working directory after we daemonize.  We
-         * can't open the database before we daemonize because file locks
-         * aren't inherited by child processes.  */
-        do_chdir = true;
-        set_no_chdir();
-    } else {
-        do_chdir = false;
-    }
     die_if_already_running();
-    daemonize();
+    daemonize_start();
 
     error = ovsdb_file_open(file_name, false, &db);
     if (error) {
@@ -101,11 +87,15 @@ main(int argc, char *argv[])
     SVEC_FOR_EACH (i, name, &active) {
         ovsdb_jsonrpc_server_connect(jsonrpc, name);
     }
-    SVEC_FOR_EACH (i, name, &passive) {
-        retval = ovsdb_jsonrpc_server_listen(jsonrpc, name);
-        if (retval) {
-            ovs_fatal(retval, "failed to listen on %s", name);
+    for (i = 0; i < passive.n; i++) {
+        struct pstream *pstream;
+        int error;
+
+        error = pstream_open(passive.names[i], &pstream);
+        if (error) {
+            ovs_fatal(error, "failed to listen on \"%s\"", passive.names[i]);
         }
+        ovsdb_jsonrpc_server_listen(jsonrpc, pstream);
     }
     svec_destroy(&active);
     svec_destroy(&passive);
@@ -115,11 +105,9 @@ main(int argc, char *argv[])
         ovs_fatal(retval, "could not listen for control connections");
     }
 
-    unixctl_command_register("exit", ovsdb_server_exit, &exiting);
+    daemonize_complete();
 
-    if (do_chdir) {
-        chdir("/");
-    }
+    unixctl_command_register("exit", ovsdb_server_exit, &exiting);
 
     exiting = false;
     while (!exiting) {
@@ -217,9 +205,11 @@ parse_options(int argc, char *argv[], char **file_namep,
     argc -= optind;
     argv += optind;
 
-    if (argc != 1) {
+    if (argc > 1) {
         ovs_fatal(0, "database file is only non-option argument; "
                 "use --help for usage");
+    } else if (argc < 1) {
+        ovs_fatal(0, "missing database file argument; use --help for usage");
     }
 
     *file_namep = argv[0];