summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2008-06-20 11:03:12 +0200
committerStefan Metzmacher <metze@samba.org>2008-06-20 11:03:12 +0200
commit197c25487e73bc9641877a2fc4100d39a0962d56 (patch)
treebeb6c2fb8361560ed0dd6e8723860b5cd44e01a3
parent2d65e5a60d6ff7648ef71535f1018390aefe194e (diff)
downloadsamba-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.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,