mirror of
https://github.com/samba-team/samba.git
synced 2025-03-08 04:58:40 +03:00
Rework process_single.c to take advantage of cluster_id() now taking an additional argument.
Andrew Bartlett and David Disseldorp (This used to be commit c961e7d74e33a0dd61b1053620fb41521322e20d)
This commit is contained in:
parent
77f71c1b65
commit
3d5594e74d
@ -52,19 +52,26 @@ static void single_accept_connection(struct event_context *ev,
|
||||
status = socket_accept(sock, &sock2);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
DEBUG(0,("single_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. 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 */
|
||||
/* this looks strange, but is correct.
|
||||
|
||||
We can only be here if woken up from select, due to
|
||||
an incomming connection.
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
talloc_steal(private, sock);
|
||||
|
||||
new_conn(ev, lp_ctx, sock2, cluster_id(socket_get_fd(sock2)), private);
|
||||
/* The cluster_id(0, fd) cannot collide with the incrementing
|
||||
* task below, as the first component is 0, not 1 */
|
||||
new_conn(ev, lp_ctx, sock2, cluster_id(0, socket_get_fd(sock2)), private);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -72,11 +79,17 @@ static void single_accept_connection(struct event_context *ev,
|
||||
*/
|
||||
static void single_new_task(struct event_context *ev,
|
||||
struct loadparm_context *lp_ctx,
|
||||
const char *service_name,
|
||||
void (*new_task)(struct event_context *, struct loadparm_context *, struct server_id, void *),
|
||||
void *private)
|
||||
{
|
||||
static uint32_t taskid = 0x10000000;
|
||||
new_task(ev, lp_ctx, cluster_id(taskid++), private);
|
||||
static uint32_t taskid = 0;
|
||||
|
||||
/* We use 1 so we cannot collide in with cluster ids generated
|
||||
* in the accept connection above, and unlikly to collide with
|
||||
* PIDs from process modal standard (don't run samba as
|
||||
* init) */
|
||||
new_task(ev, lp_ctx, cluster_id(1, taskid++), private);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user