summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/smbd/server.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/source4/smbd/server.c b/source4/smbd/server.c
index 74c87c68a4..5bd5568913 100644
--- a/source4/smbd/server.c
+++ b/source4/smbd/server.c
@@ -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,