diff options
Diffstat (limited to 'source4/smbd')
-rw-r--r-- | source4/smbd/process_single.c | 8 | ||||
-rw-r--r-- | source4/smbd/process_standard.c | 3 | ||||
-rw-r--r-- | source4/smbd/process_thread.c | 6 |
3 files changed, 17 insertions, 0 deletions
diff --git a/source4/smbd/process_single.c b/source4/smbd/process_single.c index 56b074a629..8c9dd2f7fa 100644 --- a/source4/smbd/process_single.c +++ b/source4/smbd/process_single.c @@ -26,6 +26,7 @@ #include "lib/events/events.h" #include "dlinklist.h" #include "smb_server/smb_server.h" +#include "system/filesys.h" /* @@ -51,6 +52,13 @@ static void single_accept_connection(struct event_context *ev, status = socket_accept(sock, &sock2); if (!NT_STATUS_IS_OK(status)) { DEBUG(0,("accept_connection_single: accept: %s\n", nt_errstr(status))); + /* this looks strange, but is correct. We need to + throttle things until the system clears enough + resources to handle this new socket. If we don't + then we will spin filling the log and causing more + problems. We don't panic as this is probably a + temporary resource constraint */ + sleep(1); return; } diff --git a/source4/smbd/process_standard.c b/source4/smbd/process_standard.c index 014bd34afd..bbc0aa4c7e 100644 --- a/source4/smbd/process_standard.c +++ b/source4/smbd/process_standard.c @@ -56,6 +56,9 @@ static void standard_accept_connection(struct event_context *ev, if (!NT_STATUS_IS_OK(status)) { DEBUG(0,("standard_accept_connection: accept: %s\n", nt_errstr(status))); + /* this looks strange, but is correct. We need to throttle things until + the system clears enough resources to handle this new socket */ + sleep(1); return; } diff --git a/source4/smbd/process_thread.c b/source4/smbd/process_thread.c index 692cd06724..e5ed74e939 100644 --- a/source4/smbd/process_thread.c +++ b/source4/smbd/process_thread.c @@ -89,6 +89,12 @@ static void thread_accept_connection(struct event_context *ev, status = socket_accept(sock, &state->sock); if (!NT_STATUS_IS_OK(status)) { talloc_free(ev2); + /* We need to throttle things until the system clears + enough resources to handle this new socket. If we + don't then we will spin filling the log and causing + more problems. We don't panic as this is probably a + temporary resource constraint */ + sleep(1); return; } |