X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=ovsdb%2Fovsdb-server.c;h=125001fe6783c6cb9f4587792a8f5c24142b106f;hb=d3a8012b60ecb89b0a65f14b128b5a7d7ca1a2a5;hp=f63081369183245a169e93bd27837249e6a1a43d;hpb=aa78de9dcb0cdd34cc57358fe236c563006eeb74;p=openvswitch diff --git a/ovsdb/ovsdb-server.c b/ovsdb/ovsdb-server.c index f6308136..125001fe 100644 --- a/ovsdb/ovsdb-server.c +++ b/ovsdb/ovsdb-server.c @@ -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];