mirror of
https://github.com/samba-team/samba.git
synced 2025-03-09 08:58:35 +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);
|
status = socket_accept(sock, &sock2);
|
||||||
if (!NT_STATUS_IS_OK(status)) {
|
if (!NT_STATUS_IS_OK(status)) {
|
||||||
DEBUG(0,("single_accept_connection: accept: %s\n", nt_errstr(status)));
|
DEBUG(0,("single_accept_connection: accept: %s\n", nt_errstr(status)));
|
||||||
/* this looks strange, but is correct. We need to
|
/* this looks strange, but is correct.
|
||||||
throttle things until the system clears enough
|
|
||||||
resources to handle this new socket. If we don't
|
We can only be here if woken up from select, due to
|
||||||
then we will spin filling the log and causing more
|
an incomming connection.
|
||||||
problems. We don't panic as this is probably a
|
|
||||||
temporary resource constraint */
|
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);
|
sleep(1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
talloc_steal(private, sock);
|
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,
|
static void single_new_task(struct event_context *ev,
|
||||||
struct loadparm_context *lp_ctx,
|
struct loadparm_context *lp_ctx,
|
||||||
|
const char *service_name,
|
||||||
void (*new_task)(struct event_context *, struct loadparm_context *, struct server_id, void *),
|
void (*new_task)(struct event_context *, struct loadparm_context *, struct server_id, void *),
|
||||||
void *private)
|
void *private)
|
||||||
{
|
{
|
||||||
static uint32_t taskid = 0x10000000;
|
static uint32_t taskid = 0;
|
||||||
new_task(ev, lp_ctx, cluster_id(taskid++), private);
|
|
||||||
|
/* 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