diff options
author | Stefan Metzmacher <metze@samba.org> | 2008-06-20 11:03:12 +0200 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2008-06-20 11:03:12 +0200 |
commit | 197c25487e73bc9641877a2fc4100d39a0962d56 (patch) | |
tree | beb6c2fb8361560ed0dd6e8723860b5cd44e01a3 | |
parent | 2d65e5a60d6ff7648ef71535f1018390aefe194e (diff) | |
download | samba-197c25487e73bc9641877a2fc4100d39a0962d56.tar.gz samba-197c25487e73bc9641877a2fc4100d39a0962d56.tar.bz2 samba-197c25487e73bc9641877a2fc4100d39a0962d56.zip |
smbd: make sure the parent smbd stays alive forever
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)
-rw-r--r-- | source4/smbd/server.c | 20 |
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, |