null+****@clear*****
null+****@clear*****
2012年 4月 3日 (火) 16:31:21 JST
Kouhei Sutou 2012-04-03 16:31:21 +0900 (Tue, 03 Apr 2012) New Revision: 84351e11197139e4dc9867e44bb587d1b7ef8ef4 Log: groonga: don't daemonize until connection can be accepted fixes #1326 Modified files: src/groonga.c Modified: src/groonga.c (+12 -17) =================================================================== --- src/groonga.c 2012-04-03 16:24:33 +0900 (2c4d940) +++ src/groonga.c 2012-04-03 16:31:21 +0900 (e086dd3) @@ -67,6 +67,7 @@ static int batchmode; static int number_of_lines = 0; static int newdb; static int useql; +static grn_bool is_daemon_mode = GRN_FALSE; static int (*do_client)(int argc, char **argv); static int (*do_server)(char *path); static FILE *pid_file = NULL; @@ -951,7 +952,15 @@ run_server(grn_ctx *ctx, grn_obj *db, grn_com_event *ev, ev->opaque = db; grn_edges_init(ctx, dispatcher); if (!grn_com_sopen(ctx, ev, bind_address, port, handler, he)) { - run_server_loop(ctx, ev); + if (is_daemon_mode) { + exit_code = daemonize(); + } + if (exit_code == EXIT_SUCCESS) { + run_server_loop(ctx, ev); + } + if (is_daemon_mode) { + clean_pid_file(); + } exit_code = EXIT_SUCCESS; } else { fprintf(stderr, "grn_com_sopen failed (%s:%d): %s\n", @@ -1961,20 +1970,6 @@ g_server(char *path) return exit_code; } -static int -do_daemon(char *path) -{ - int exit_code; - - exit_code = daemonize(); - if (exit_code == EXIT_SUCCESS) { - exit_code = do_server(path); - } - clean_pid_file(); - - return exit_code; -} - enum { mode_alone = 0, mode_client, @@ -2824,8 +2819,8 @@ main(int argc, char **argv) exit_code = do_client(argc - i, argv + i); break; case mode_daemon : - exit_code = do_daemon(argc > i ? argv[i] : NULL); - break; + is_daemon_mode = GRN_TRUE; + /* fallthru */ case mode_server : exit_code = do_server(argc > i ? argv[i] : NULL); break;