smbd: make sure the parent smbd stays alive forever
authorStefan Metzmacher <metze@samba.org>
Fri, 20 Jun 2008 09:03:12 +0000 (11:03 +0200)
committerStefan Metzmacher <metze@samba.org>
Fri, 20 Jun 2008 09:03:12 +0000 (11:03 +0200)
The problem was that the parent smbd doesn't have
any event when the process model standard was in use.

Now we always add an fd event for stdin, but may not
ask for any events to trigger.

metze
(This used to be commit fa6c00734ccf9bfe7a962253ddb5e2a1722c9b09)

source4/smbd/server.c

index 74c87c68a447d45d3f1c8cd189ff53c1d6e5690a..5bd5568913deac99f4607a4166945d81ef051b54 100644 (file)
@@ -202,6 +202,7 @@ static int binary_smbd_main(const char *binary_name, int argc, const char *argv[
        init_module_fn static_init[] = { STATIC_smbd_MODULES };
        init_module_fn *shared_init;
        struct event_context *event_ctx;
+       uint16_t stdin_event_flags;
        NTSTATUS status;
        const char *model = "standard";
        int max_runtime = 0;
@@ -324,15 +325,20 @@ static int binary_smbd_main(const char *binary_name, int argc, const char *argv[
        cluster_ctdb_init(cmdline_lp_ctx, event_ctx, model);
 
        if (opt_interactive) {
-               /* catch EOF on stdin */
-#ifdef SIGTTIN
-               signal(SIGTTIN, SIG_IGN);
-#endif
-               event_add_fd(event_ctx, event_ctx, 0, EVENT_FD_READ, 
-                            server_stdin_handler,
-                            discard_const(binary_name));
+               /* terminate when stdin goes away */
+               stdin_event_flags = EVENT_FD_READ;
+       } else {
+               /* stay alive forever */
+               stdin_event_flags = 0;
        }
 
+       /* catch EOF on stdin */
+#ifdef SIGTTIN
+       signal(SIGTTIN, SIG_IGN);
+#endif
+       event_add_fd(event_ctx, event_ctx, 0, stdin_event_flags,
+                    server_stdin_handler,
+                    discard_const(binary_name));
 
        if (max_runtime) {
                event_add_timed(event_ctx, event_ctx,